mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-06-09 22:57:54 +02:00
c1fd0b77ad
Co-authored-by: hrglpfrmpf <hrglpfrmpf@web.de> Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/2831 Co-authored-by: hrglpfrmpf <hrglpfrmpf@noreply.codeberg.org> Co-committed-by: hrglpfrmpf <hrglpfrmpf@noreply.codeberg.org>
103 lines
3.5 KiB
Java
103 lines
3.5 KiB
Java
/* Copyright (C) 2021 Frank Ertl
|
|
|
|
This file is part of Gadgetbridge.
|
|
|
|
Gadgetbridge is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as published
|
|
by the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Gadgetbridge is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
package nodomain.freeyourgadget.gadgetbridge.service.devices.withingssteelhr.communication.datastructures;
|
|
|
|
import org.threeten.bp.Instant;
|
|
import org.threeten.bp.ZoneId;
|
|
import org.threeten.bp.zone.ZoneOffsetTransition;
|
|
import org.threeten.bp.zone.ZoneRules;
|
|
|
|
import java.nio.ByteBuffer;
|
|
import java.util.Date;
|
|
import java.util.TimeZone;
|
|
|
|
import ch.qos.logback.core.encoder.ByteArrayUtil;
|
|
|
|
public class Time extends WithingsStructure {
|
|
|
|
private Instant now;
|
|
private int timeOffsetInSeconds;
|
|
private Instant nextDaylightSavingTransition;
|
|
private int nextDaylightSavingTransitionOffsetInSeconds;
|
|
|
|
public Time() {
|
|
now = Instant.now();
|
|
final TimeZone timezone = TimeZone.getDefault();
|
|
timeOffsetInSeconds = timezone.getOffset(now.toEpochMilli()) / 1000;
|
|
final ZoneId zoneId = ZoneId.systemDefault();
|
|
final ZoneRules zoneRules = zoneId.getRules();
|
|
final ZoneOffsetTransition nextTransition = zoneRules.nextTransition(Instant.now());
|
|
long nextTransitionTs = 0;
|
|
if (nextTransition != null) {
|
|
nextTransitionTs = nextTransition.getDateTimeBefore().atZone(zoneId).toEpochSecond();
|
|
nextDaylightSavingTransitionOffsetInSeconds = nextTransition.getOffsetAfter().getTotalSeconds();
|
|
}
|
|
|
|
nextDaylightSavingTransition = Instant.ofEpochSecond(nextTransitionTs);
|
|
}
|
|
|
|
public Instant getNow() {
|
|
return now;
|
|
}
|
|
|
|
public void setNow(Instant now) {
|
|
this.now = now;
|
|
}
|
|
|
|
public int getTimeOffsetInSeconds() {
|
|
return timeOffsetInSeconds;
|
|
}
|
|
|
|
public void setTimeOffsetInSeconds(int TimeOffsetInSeconds) {
|
|
this.timeOffsetInSeconds = TimeOffsetInSeconds;
|
|
}
|
|
|
|
public Instant getNextDaylightSavingTransition() {
|
|
return nextDaylightSavingTransition;
|
|
}
|
|
|
|
public void setNextDaylightSavingTransition(Instant nextDaylightSavingTransition) {
|
|
this.nextDaylightSavingTransition = nextDaylightSavingTransition;
|
|
}
|
|
|
|
public int getNextDaylightSavingTransitionOffsetInSeconds() {
|
|
return nextDaylightSavingTransitionOffsetInSeconds;
|
|
}
|
|
|
|
public void setNextDaylightSavingTransitionOffsetInSeconds(int nextDaylightSavingTransitionOffsetInSeconds) {
|
|
this.nextDaylightSavingTransitionOffsetInSeconds = nextDaylightSavingTransitionOffsetInSeconds;
|
|
}
|
|
|
|
@Override
|
|
public short getType() {
|
|
return WithingsStructureType.TIME;
|
|
}
|
|
|
|
@Override
|
|
public short getLength() {
|
|
return 20;
|
|
}
|
|
|
|
@Override
|
|
protected void fillinTypeSpecificData(ByteBuffer rawDataBuffer) {
|
|
rawDataBuffer.putInt((int)now.getEpochSecond());
|
|
rawDataBuffer.putInt(timeOffsetInSeconds);
|
|
rawDataBuffer.putInt((int)nextDaylightSavingTransition.getEpochSecond());
|
|
rawDataBuffer.putInt(nextDaylightSavingTransitionOffsetInSeconds);
|
|
}
|
|
}
|