Initial commit
This commit is contained in:
113
src/main/java/ch/hevs/isi/db/TimeManager.java
Normal file
113
src/main/java/ch/hevs/isi/db/TimeManager.java
Normal file
@ -0,0 +1,113 @@
|
||||
package ch.hevs.isi.db;
|
||||
|
||||
import java.time.*;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
/**
|
||||
* TimeManager Class
|
||||
*
|
||||
* This class allows to calculate a timestamp taking into account the time index of Minecraft Electrical Age and its
|
||||
* time acceleration. (1 day = 10 minutes)
|
||||
* You also have to indicate a number of days to subtract from the current time which will determine the time t0 which
|
||||
* defines the starting time of the simulation.
|
||||
*/
|
||||
public class TimeManager {
|
||||
|
||||
// Start time
|
||||
private final LocalDateTime t0;
|
||||
|
||||
// days since beginning of game
|
||||
private long days;
|
||||
|
||||
// previous value of "CLOCK_FLOAT" coming from Minecraft EA
|
||||
private float lastEaClock;
|
||||
|
||||
// timestamp for InfluxDB
|
||||
private long nanosForDB;
|
||||
|
||||
|
||||
/* ************************************************************************************************************ */
|
||||
/* Constructors */
|
||||
/* ************************************************************************************************************ */
|
||||
/**
|
||||
* Constructor of TimeManager class, where the start time of the game is calculated from today at midnight minus
|
||||
* the given number of days. Today at midnight, from local time.
|
||||
*
|
||||
* @param minusDays The number of days to subtract to the current day.
|
||||
*/
|
||||
public TimeManager(int minusDays) {
|
||||
t0 = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT).minusDays(minusDays);
|
||||
days = 0;
|
||||
lastEaClock = 0f;
|
||||
nanosForDB = 0;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************************************************************************************ */
|
||||
/* Public methods */
|
||||
/* ************************************************************************************************************ */
|
||||
/**
|
||||
* This method takes the index of the Electrical-Age clock and generates the corresponding timestamp.
|
||||
*
|
||||
* @param strEaClock The EA clock given as a {@code String}
|
||||
*/
|
||||
public void setTimestamp(String strEaClock) {
|
||||
setTimestamp(Float.parseFloat(strEaClock));
|
||||
}
|
||||
|
||||
/**
|
||||
* This method takes the index of the Electrical-Age clock and generates the corresponding timestamp.
|
||||
*
|
||||
* @param eaClock The EA clock given as a {@code float}
|
||||
*/
|
||||
public void setTimestamp(float eaClock) {
|
||||
// eaClock: value read in data point with label "CLOCK_FLOAT", if it's less then the previous one, it means
|
||||
// that a day has passed !
|
||||
if (eaClock < lastEaClock)
|
||||
days++;
|
||||
|
||||
// Storing the EA Clock and computing the corresponding nanoseconds...
|
||||
lastEaClock = eaClock;
|
||||
long nanoOfDay = Math.round(eaClock * (24 * 3600E9));
|
||||
|
||||
// Creates a timestamp from t0 and adding to it the passed days and the nanoseconds of the current days
|
||||
LocalDateTime tInsert = t0.plusDays(days);
|
||||
tInsert = tInsert.plus(Duration.ofNanos(nanoOfDay));
|
||||
System.out.println("tInsert in method: " + tInsert.format(DateTimeFormatter.ISO_DATE_TIME));
|
||||
|
||||
// Getting the related timestamp in nanoseconds according to the local time zone
|
||||
ZoneId zoneId = ZoneId.systemDefault();
|
||||
nanosForDB = tInsert.atZone(zoneId).toEpochSecond() * 1000000000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gives the actual timestamp according to the EA clock.
|
||||
*
|
||||
* @return The timestamp in nanoseconds
|
||||
*/
|
||||
public long getNanosForDB() {
|
||||
return nanosForDB; // nanos for writing in DB
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true}
|
||||
* @return
|
||||
*/
|
||||
public boolean isLastDay() {
|
||||
return (days % 3) == 2;
|
||||
}
|
||||
|
||||
/* ************************************************************************************************************ */
|
||||
/* */
|
||||
/* Public Main */
|
||||
/* */
|
||||
/* ************************************************************************************************************ */
|
||||
public static void main(String[] args) {
|
||||
TimeManager tm = new TimeManager(3);
|
||||
System.out.println("t0: " + tm.t0.toString());
|
||||
tm.setTimestamp(0.5f);
|
||||
System.out.println("nanosForDBs: " + tm.getNanosForDB());
|
||||
tm.setTimestamp("0.1");
|
||||
System.out.println("nanosForDBs: " + tm.getNanosForDB());
|
||||
}
|
||||
}
|
1
src/main/java/ch/hevs/isi/db/package-info.java
Normal file
1
src/main/java/ch/hevs/isi/db/package-info.java
Normal file
@ -0,0 +1 @@
|
||||
package ch.hevs.isi.db;
|
Reference in New Issue
Block a user