package net.cmikavac.autowol.utils; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; import android.content.Context; public class TimeUtil { /** * Gets a timestamp in milliseconds from hour and minute of day. * @param hour Hour of day. * @param minute Minute of day. * @return Timestamp in milliseconds. */ public static Long getTimeInMilliseconds(int hour, int minute) { Calendar time = Calendar.getInstance(); time.set(Calendar.HOUR_OF_DAY, hour); time.set(Calendar.MINUTE, minute); return time.getTimeInMillis(); } /** * Formats time in milliseconds based on users AndroidOS preferences (AM/PM vs 24-hour). * @param milliSeconds Timestamp in milliseconds. * @param context Context entity. * @return Human-readable formatted time string. */ public static String getFormatedTime(Long milliSeconds, Context context) { DateFormat formatter = getFormatter(context); Calendar time = Calendar.getInstance(); time.setTimeInMillis(milliSeconds); return formatter.format(time.getTime()); } /** * Gets android formatter based on current Context and users AndroidOS preferences (AM/PM vs 24-hour). * @param context Context entity. * @return DateFormat entity with formatting set. */ private static DateFormat getFormatter(Context context) { String format = android.text.format.DateFormat.is24HourFormat(context) ? "HH:mm" : "hh:mmaa"; return new SimpleDateFormat(format, Locale.getDefault()); } /** * Gets hour of day from milliseconds. * @param milliSeconds Timestamp in milliseconds. * @return Hour of day. */ public static int getHourFromMilliseconds(Long milliSeconds) { Calendar time = Calendar.getInstance(); time.setTimeInMillis(milliSeconds); return time.get(Calendar.HOUR_OF_DAY); } /** * Gets minutes value from milliseconds. * @param milliSeconds Timestamp in milliseconds. * @return Minutes. */ public static int getMinuteFromMilliseconds(Long milliSeconds) { Calendar time = Calendar.getInstance(); time.setTimeInMillis(milliSeconds); return time.get(Calendar.MINUTE); } /** * Checks if time now is between quiet hours "from" and "to" values. Creates 3 new * new timestamps and sets hours and minutes for quiet hours "from" and "to" * and then compares the timestamps in milliseconds. * @param quietFrom Quiet hours from timestamp in milliseconds. * @param quietTo Quiet hours to timestamp in milliseconds. * @return Is time now between quiet hours "from" and "to" values? */ public static Boolean isNowBetweenQuietHours(Long quietFrom, Long quietTo) { Calendar timeNow = Calendar.getInstance(); Calendar timeFrom = Calendar.getInstance(); timeFrom.set(Calendar.HOUR_OF_DAY, getHourFromMilliseconds(quietFrom)); timeFrom.set(Calendar.MINUTE, getMinuteFromMilliseconds(quietFrom)); Calendar timeTo = Calendar.getInstance(); timeTo.set(Calendar.HOUR_OF_DAY, getHourFromMilliseconds(quietTo)); timeTo.set(Calendar.MINUTE, getMinuteFromMilliseconds(quietTo)); if (timeTo.before(timeFrom)) { timeTo.add(Calendar.DATE, 1); } return timeNow.after(timeFrom) && timeNow.before(timeTo) ? true : false; } /** * Checks if idleTime amount of minutes has passed since last network disconnection. * @param idleTime Number of minutes to check if they passed since last DC. * @param lastDisconnected Last time disconnected timestamp in milliseconds. * @return Has idle time passed? */ public static Boolean hasIdleTimePassed(Integer idleTime, Long lastDisconnected) { if (lastDisconnected.equals(null)) return true; Calendar timeIdle = Calendar.getInstance(); timeIdle.add(Calendar.MINUTE, -1 * idleTime); Calendar timeDisconnected = Calendar.getInstance(); timeDisconnected.setTimeInMillis(lastDisconnected); return timeDisconnected.before(timeIdle); } }