summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java')
-rw-r--r--src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java
new file mode 100644
index 0000000..32cce65
--- /dev/null
+++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java
@@ -0,0 +1,144 @@
+package org.uic.barcode.dynamicContent.fdc1;
+
+import java.time.Instant;
+import java.time.temporal.ChronoField;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.uic.barcode.asn1.datatypes.FieldOrder;
+import org.uic.barcode.asn1.datatypes.IntRange;
+import org.uic.barcode.asn1.datatypes.Sequence;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class TimeStamp.
+ */
+@Sequence
+public class TimeStamp {
+
+
+ /*
+ -- Moment of generation of the dynamic content, expressed in UTC :
+ -- * dynamicContentDay is the number of days from issuing date
+ -- (UicRailTicketData.issuingDetail.issuingYear and issuingDay)
+ -- The range 0..1070 allows a validity equal to that of the validFrom (700) plus
+ -- validUntil (370) elements of the different transport documents of UicRailTicketData.
+ -- * dynamicContentTime is the number of seconds of the day
+ -- (from 0 = 0:00:00 to 86399 = 23:59:59)
+ -- These two elements shall be either both present, either both absent
+ dynamicContentDay INTEGER (0..366),
+ *
+ */
+ @FieldOrder(order = 0)
+ @IntRange(minValue=1, maxValue=366)
+ public Long day;
+
+ /** The second of day. */
+ // dynamicContentTime INTEGER (0..86399) OPTIONAL,
+ @FieldOrder(order = 1)
+ @IntRange(minValue=0, maxValue=86399)
+ public Long secondOfDay;
+
+
+
+ /**
+ * Instantiates a new time stamp and sets the time-stamp to now.
+ */
+ public TimeStamp() {
+ Instant now = Instant.now();
+ day = new Long(now.get(ChronoField.DAY_OF_YEAR));
+ secondOfDay = new Long(now.get(ChronoField.SECOND_OF_DAY));
+ }
+
+ /**
+ * Sets the the time-stamp to now.
+ */
+ public void setNow() {
+ Instant now = Instant.now();
+ day = new Long(now.get(ChronoField.DAY_OF_YEAR));
+ secondOfDay = new Long(now.get(ChronoField.SECOND_OF_DAY));
+ }
+
+ /**
+ * Gets the day.
+ *
+ * @return the day
+ */
+ public Long getDay() {
+ return day;
+ }
+
+ /**
+ * Sets the day.
+ *
+ * @param day the new day
+ */
+ public void setDay(Long day) {
+ this.day = day;
+ }
+
+ /**
+ * Gets the time.
+ *
+ * @return the time
+ */
+ public Long getTime() {
+ return secondOfDay;
+ }
+
+ /**
+ * Sets the time.
+ *
+ * @param time the new time
+ */
+ public void setTime(Long time) {
+ this.secondOfDay = time;
+ }
+
+ /**
+ * Gets the time.
+ *
+ * @return the date and time of content creation in UTC
+ */
+ public Date getTimeAsDate() {
+
+ Calendar cal = Calendar.getInstance();
+ int dayOfYear = cal.get(Calendar.DAY_OF_YEAR);
+
+ if (dayOfYear - day.intValue() > 250) {
+ cal.add(Calendar.YEAR, 1);
+ }
+ if (day.intValue() - dayOfYear > 250) {
+ cal.add(Calendar.YEAR, -1);
+ }
+
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ cal.set(Calendar.SECOND,0);
+ cal.set(Calendar.HOUR,0);
+ cal.set(Calendar.MINUTE,0);
+ cal.set(Calendar.DAY_OF_YEAR, day.intValue());
+ cal.add(Calendar.SECOND, secondOfDay.intValue());
+
+ return cal.getTime();
+ }
+
+ /**
+ * Sets the date time.
+ *
+ * @param dateUTC the current date and time in UTC
+ */
+ public void setDateTime(Date dateUTC) {
+
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(dateUTC);
+
+ day = Long.valueOf(cal.get(Calendar.DAY_OF_YEAR));
+
+ secondOfDay = (long) cal.get(Calendar.SECOND);
+ secondOfDay = secondOfDay + 60 * (long) cal.get(Calendar.MINUTE);
+ secondOfDay = secondOfDay + 60 * 60 * (long) cal.get(Calendar.HOUR_OF_DAY);
+
+ }
+
+}