Fix seconds/ms not being considered for today and negative amount of weekdays

This commit is contained in:
Eugene Cheung 2017-06-01 20:04:41 -04:00
commit d0171abdee

View file

@ -17,13 +17,15 @@ public class CalendarUtil {
} }
/** /**
* Returns the time elapsed so far today in seconds. * Returns the time elapsed so far today in milliseconds.
* *
* @return Time elapsed today in seconds. * @return Time elapsed today in milliseconds.
*/ */
public long getElapsedToday() { public long getElapsedToday() {
// Time elapsed so far today // Time elapsed so far today
return (calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)) * MS_PER_MINUTE; return (calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)) * MS_PER_MINUTE
+ calendar.get(Calendar.SECOND) * 1000
+ calendar.get(Calendar.MILLISECOND);
} }
/** /**
@ -32,8 +34,15 @@ public class CalendarUtil {
* @return Time elapsed this week in milliseconds. * @return Time elapsed this week in milliseconds.
*/ */
public long getElapsedWeek() { public long getElapsedWeek() {
// Today + days passed // Today + days passed this week
return getElapsedToday() + ((calendar.get(Calendar.DAY_OF_WEEK) - 1 - calendar.getFirstDayOfWeek()) * MS_PER_DAY); long elapsed = getElapsedToday();
final int passedWeekdays = calendar.get(Calendar.DAY_OF_WEEK) - 1 - calendar.getFirstDayOfWeek();
if (passedWeekdays > 0) {
elapsed += passedWeekdays * MS_PER_DAY;
}
return elapsed;
} }
/** /**
@ -43,7 +52,8 @@ public class CalendarUtil {
*/ */
public long getElapsedMonth() { public long getElapsedMonth() {
// Today + rest of this month // Today + rest of this month
return getElapsedToday() + ((calendar.get(Calendar.DAY_OF_MONTH) - 1) * MS_PER_DAY); return getElapsedToday() +
((calendar.get(Calendar.DAY_OF_MONTH) - 1) * MS_PER_DAY);
} }
/** /**
@ -67,10 +77,7 @@ public class CalendarUtil {
year--; year--;
} }
final Calendar monthCal = new GregorianCalendar(year, month, 1); elapsed += getDaysInMonth(year, month) * MS_PER_DAY;
final int daysInMonth = monthCal.getActualMaximum(Calendar.DAY_OF_MONTH);
elapsed += daysInMonth * MS_PER_DAY;
} }
return elapsed; return elapsed;
@ -86,15 +93,25 @@ public class CalendarUtil {
long elapsed = getElapsedMonth(); long elapsed = getElapsedMonth();
int month = calendar.get(Calendar.MONTH) - 1; int month = calendar.get(Calendar.MONTH) - 1;
int year = calendar.get(Calendar.YEAR);
while (month > Calendar.JANUARY) { while (month > Calendar.JANUARY) {
final Calendar monthCal = new GregorianCalendar(calendar.get(Calendar.YEAR), month, 1); elapsed += getDaysInMonth(year, month) * MS_PER_DAY;
final int daysInMonth = monthCal.getActualMaximum(Calendar.DAY_OF_MONTH);
elapsed += daysInMonth * MS_PER_DAY;
month--; month--;
} }
return elapsed; return elapsed;
} }
/**
* Gets the number of days for the given month in the given year.
*
* @param year The year.
* @param month The month (1 - 12).
* @return The days in that month/year.
*/
private int getDaysInMonth(int year, int month) {
final Calendar monthCal = new GregorianCalendar(calendar.get(Calendar.YEAR), month, 1);
return monthCal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
} }