You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.1 KiB
68 lines
2.1 KiB
package seng302.Model;
|
|
|
|
import com.github.bfsmith.geotimezone.TimeZoneLookup;
|
|
import com.github.bfsmith.geotimezone.TimeZoneResult;
|
|
import javafx.beans.property.SimpleStringProperty;
|
|
import javafx.beans.property.StringProperty;
|
|
import seng302.GPSCoordinate;
|
|
|
|
import java.time.Duration;
|
|
import java.time.LocalDateTime;
|
|
import java.time.ZoneId;
|
|
import java.time.ZonedDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
import java.time.temporal.ChronoUnit;
|
|
|
|
/**
|
|
* Created by Gondr on 19/04/2017.
|
|
*/
|
|
public class RaceClock {
|
|
private long lastTime;
|
|
private ZoneId zoneId;
|
|
private ZonedDateTime time;
|
|
private StringProperty timeString;
|
|
|
|
public RaceClock(ZonedDateTime zonedDateTime) {
|
|
this.zoneId = zonedDateTime.getZone();
|
|
this.timeString = new SimpleStringProperty();
|
|
this.time = zonedDateTime;
|
|
setTime(time);
|
|
}
|
|
|
|
public static ZonedDateTime getCurrentZonedDateTime(GPSCoordinate gpsCoordinate) {
|
|
TimeZoneLookup timeZoneLookup = new TimeZoneLookup();
|
|
TimeZoneResult timeZoneResult = timeZoneLookup.getTimeZone(gpsCoordinate.getLatitude(), gpsCoordinate.getLongitude());
|
|
ZoneId zone = ZoneId.of(timeZoneResult.getResult());
|
|
return LocalDateTime.now(zone).atZone(zone);
|
|
}
|
|
|
|
/**
|
|
* Sets time to arbitrary zoned time.
|
|
*
|
|
* @param time arbitrary time with timezone.
|
|
*/
|
|
public void setTime(ZonedDateTime time) {
|
|
this.time = time;
|
|
this.timeString.set(DateTimeFormatter.ofPattern("HH:mm:ss dd/MM/YYYY Z").format(time));
|
|
this.lastTime = System.currentTimeMillis();
|
|
}
|
|
|
|
/**
|
|
* Updates time by duration elapsed since last update.
|
|
*/
|
|
public void updateTime() {
|
|
this.time = this.time.plus(Duration.of(System.currentTimeMillis() - this.lastTime, ChronoUnit.MILLIS));
|
|
this.lastTime = System.currentTimeMillis();
|
|
setTime(time);
|
|
}
|
|
|
|
public String getTimeZone() {
|
|
System.out.println(zoneId.toString());
|
|
return zoneId.toString();
|
|
}
|
|
|
|
public StringProperty timeStringProperty() {
|
|
return timeString;
|
|
}
|
|
}
|