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