package org.openstack.atlas.util.common; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; public class CalendarUtils { private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static Calendar stripOutMinsAndSecs(Calendar cal) { Calendar newCal = Calendar.getInstance(); newCal.setTime(cal.getTime()); newCal.set(Calendar.MINUTE, 0); newCal.set(Calendar.SECOND, 0); newCal.set(Calendar.MILLISECOND, 0); return newCal; } public static Calendar stringToCalendar(String calAsString) throws ParseException { Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); cal.setTime(sdf.parse(calAsString)); return cal; } public static Calendar copy(Calendar calToCopy) { Calendar copy = Calendar.getInstance(); copy.setTime(calToCopy.getTime()); return copy; } public static String calendarToString(Calendar cal) { SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); return sdf.format(cal.getTime()); } public static boolean isTopOfTheHour(Calendar cal) { return cal.get(Calendar.MINUTE) == 0 && cal.get(Calendar.SECOND) == 0 && cal.get(Calendar.MILLISECOND) == 0; } /* * This method returns true if cal is between startTime (inclusive) and endTime (inclusive or exclusive). */ public static boolean isBetween(Calendar cal, Calendar startTime, Calendar endTime, boolean endTimeInclusive) { if (endTimeInclusive) { return cal.compareTo(startTime) >= 0 && cal.compareTo(endTime) <= 0; } return cal.compareTo(startTime) >= 0 && cal.compareTo(endTime) < 0; } public static Duration calcDuration(Calendar startTime, Calendar endTime) { final int MILLI_TO_SEC_CONVERSION = 1000; final int SEC_TO_MIN_CONVERSION = 60; final int MIN_TO_HOUR_CONVERSION = 60; Duration duration = new Duration(); long elapsedTimeInMillis = endTime.getTimeInMillis() - startTime.getTimeInMillis(); long elapsedTimeInSecs = elapsedTimeInMillis / MILLI_TO_SEC_CONVERSION; long elapsedTimeInMins = elapsedTimeInSecs / SEC_TO_MIN_CONVERSION; long elapsedTimeInHours = elapsedTimeInMins / MIN_TO_HOUR_CONVERSION; duration.setHours(elapsedTimeInHours); duration.setMins(elapsedTimeInMins - elapsedTimeInHours * MIN_TO_HOUR_CONVERSION); duration.setSecs(elapsedTimeInSecs - elapsedTimeInMins * SEC_TO_MIN_CONVERSION); return duration; } }