package org.uic.ticket.api.asn.omv1; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; import java.util.concurrent.TimeUnit; public class DateTimeUtils { public static Long getDateDifference(Date issuingDate, Date localDate) { if (issuingDate == null || localDate == null) return null; Calendar issuingCal = Calendar.getInstance(); issuingCal.clear(); issuingCal.setTime(issuingDate); issuingCal.setTimeZone(TimeZone.getTimeZone("UTC")); issuingCal.set(Calendar.HOUR_OF_DAY, 0); issuingCal.set(Calendar.MINUTE, 0); issuingCal.set(Calendar.SECOND, 0); issuingCal.set(Calendar.MILLISECOND, 0); Calendar fromCal = Calendar.getInstance(); fromCal.clear(); fromCal.setTime(localDate); fromCal.setTimeZone(TimeZone.getTimeZone("UTC")); fromCal.set(Calendar.HOUR_OF_DAY, 0); fromCal.set(Calendar.MINUTE, 0); fromCal.set(Calendar.SECOND, 0); fromCal.set(Calendar.MILLISECOND, 0); long diff = localDate.getTime() - issuingDate.getTime(); long dayDiff = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS); return new Long(dayDiff); } public static Date getLocalDateFromDifference(Date issuingDate, int diff , Long time ) { if (issuingDate == null) return null; Calendar cal = Calendar.getInstance(); cal.clear(); cal.setTime(issuingDate); cal.add(Calendar.DAY_OF_YEAR, diff); if (time != null) { int hours = time.intValue() / 60; int minutes = time.intValue() - hours * 60; cal.set(Calendar.HOUR_OF_DAY, hours); cal.set(Calendar.MINUTE,minutes); } return cal.getTime(); } public static void setTime(Calendar cal, Long time){ if (time != null) { int hours = time.intValue() / 60; int minutes = time.intValue() - hours * 60; cal.set(Calendar.HOUR_OF_DAY, hours); cal.set(Calendar.MINUTE,minutes); } } public static Long getTime (Calendar cal) { if (cal == null || !cal.isSet(Calendar.HOUR_OF_DAY) || !cal.isSet(Calendar.MINUTE) ) { return null; } int time = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE); if (time > 0) { return new Long (time ); } return null; } public static Long getTime (Date date) { Calendar cal = Calendar.getInstance(); cal.clear(); cal.setTime(date); if (cal == null || !cal.isSet(Calendar.HOUR_OF_DAY) || !cal.isSet(Calendar.MINUTE) ) { return null; } int time = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE); if (time > 0) { return new Long (time ); } return null; } public static Date getDate(Date issuingDate, Long date, Long time){ if (issuingDate == null) return null; if (date == null) { date = 0L; } Calendar issuingCal = Calendar.getInstance(); issuingCal.clear(); issuingCal.setTime(issuingDate); Calendar cal = Calendar.getInstance(); cal.clear(); cal.set(Calendar.YEAR,issuingCal.get(Calendar.YEAR) ); cal.set(Calendar.DAY_OF_YEAR,issuingCal.get(Calendar.DAY_OF_YEAR) ); cal.add(Calendar.DAY_OF_YEAR, date.intValue()); DateTimeUtils.setTime(cal,time); return cal.getTime(); } /** * Gets the UTC offset. * * @param date and time of the issuing date * @param date and time of the departure * @return the UTC offset in multiples of 15 minutes * the offset needs to be added to local time to get the UTC time (UTC = local + offset) */ public static Long getUTCoffset(Date local) { Calendar cal = Calendar.getInstance(); cal.clear(); cal.setTime(local); /* * Returns the amount of time in milliseconds to add to UTC to get standard time in this * time zone. Because this value is not affected by daylight saving time, it is called raw offset. * If an underlying TimeZone implementation subclass supports historical GMT offset changes, the method * returns the raw offset value of the current date. In Honolulu, for example, its raw offset * changed from GMT-10:30 to GMT-10:00 in 1947, and this method * always returns -36000000 milliseconds (i.e., -10 hours). */ int minuteOffset = - cal.getTimeZone().getRawOffset()/ ( 1000 * 60 * 15 ); return new Long (minuteOffset); } public static Date getUTCDate(Date issuingDate, Long date, Long time, Long UTCOffset) { if (issuingDate == null) return null; if (UTCOffset == null) return null; if (time == null) return null; if (date == null) { date = 0L; } Calendar issuingCal = Calendar.getInstance(); issuingCal.clear(); issuingCal.setTime(issuingDate); Calendar cal = Calendar.getInstance(); cal.clear(); cal.set(Calendar.YEAR,issuingCal.get(Calendar.YEAR) ); cal.set(Calendar.DAY_OF_YEAR,issuingCal.get(Calendar.DAY_OF_YEAR) ); cal.add(Calendar.DAY_OF_YEAR, date.intValue()); int hours = time.intValue() / 60; int minutes = time.intValue() - hours * 60; cal.set(Calendar.HOUR_OF_DAY, hours); cal.set(Calendar.MINUTE,minutes); cal.add(Calendar.MINUTE, (int) (UTCOffset * 15) ); cal.setTimeZone(TimeZone.getTimeZone("UTC")); return cal.getTime(); } }