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; } }