package org.openstack.atlas.util.staticutils; import java.util.Calendar; import java.util.Date; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.ISODateTimeFormat; public class StaticDateTimeUtils { private static final long MILLIS_COEF = 10000000L; public static final DateTimeFormatter isoFormat = ISODateTimeFormat.dateTimeNoMillis(); public static final DateTimeFormatter apacheDateTimeFormat = DateTimeFormat.forPattern("dd/MMM/yyyy:HH:mm:ss Z"); public static final DateTimeFormatter utcApacheDateTimeFormat = apacheDateTimeFormat.withZone(DateTimeZone.UTC); public static final DateTimeFormatter sqlDateTimeFormat = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss"); public static long dateTimeToOrdinalMillis(DateTime dt) { return dt.getYear() * 10000000000000L + dt.getMonthOfYear() * 100000000000L + dt.getDayOfMonth() * 1000000000L + dt.getHourOfDay() * 10000000L + dt.getMinuteOfHour() * 100000L + dt.getSecondOfMinute() * 1000L + dt.getMillisOfSecond(); } public static DateTime OrdinalMillisToDateTime(long ord, boolean useUTC) { int millis = (int) (ord % 1000); ord /= 1000; int secs = (int) (ord % 100); ord /= 100; int mins = (int) (ord % 100); ord /= 100; int hours = (int) (ord % 100); ord /= 100; int days = (int) (ord % 100); ord /= 100; int months = (int) (ord % 100); ord /= 100; int years = (int) (ord % 10000); if (useUTC) { return new DateTime(years, months, days, hours, mins, secs, millis, DateTimeZone.UTC); } return new DateTime(years, months, days, hours, mins, secs, millis); } public static String toApacheDateTime(DateTime dt) { return apacheDateTimeFormat.print(dt); } public static DateTime parseApacheDateTime(String apacheDateStr, boolean useUTC) { if (useUTC) { utcApacheDateTimeFormat.parseDateTime(apacheDateStr); } return apacheDateTimeFormat.parseDateTime(apacheDateStr); } public static DateTime nowDateTime(boolean useUTC) { if (useUTC) { return DateTime.now().withZone(DateTimeZone.UTC); } return DateTime.now(); } public static String toSqlTime(Date date) { return sqlDateTimeFormat.print(toDateTime(date, true)); } public static double getEpochSeconds() { return ((double) System.currentTimeMillis()) * 0.001; } public static DateTime toDateTime(Date date, boolean useUTC) { if (useUTC) { return new DateTime(date).withZone(DateTimeZone.UTC); } return new DateTime(date); } public static Date toDate(Calendar cal) { return cal.getTime(); } public static Date toDate(DateTime dt) { return dt.toDate(); } public static DateTime toDateTime(Calendar cal, boolean useUTC) { if (useUTC) { return new DateTime(cal).withZone(DateTimeZone.UTC); } return new DateTime(cal); } public static DateTime hourKeyToDateTime(String dateHour, boolean useUTC) { return hourKeyToDateTime(Long.parseLong(dateHour), useUTC); } public static DateTime hourKeyToDateTime(long ord, boolean useUTC) { return StaticDateTimeUtils.OrdinalMillisToDateTime(ord * MILLIS_COEF, useUTC); } public static long dateTimeToHourLong(DateTime dt) { return StaticDateTimeUtils.dateTimeToOrdinalMillis(dt) / MILLIS_COEF; } }