/woloc/src/main/java/org/richardsson/woloc/time/TimeUtil.java

https://bitbucket.org/krichardsson/woloc · Java · 92 lines · 67 code · 25 blank · 0 comment · 1 complexity · f5f6889afeb33dd8e9b97dd5194412d6 MD5 · raw file

  1. package org.richardsson.woloc.time;
  2. import java.util.Calendar;
  3. import java.util.Date;
  4. import java.util.GregorianCalendar;
  5. public class TimeUtil {
  6. private TimeUtil() {}
  7. public static GregorianCalendar startOfDay(GregorianCalendar reference) {
  8. final int year = reference.get(Calendar.YEAR);
  9. final int month = reference.get(Calendar.MONTH);
  10. final int day = reference.get(Calendar.DAY_OF_MONTH);
  11. return createCalendar(year, month, day);
  12. }
  13. public static GregorianCalendar endOfDay(GregorianCalendar reference) {
  14. final GregorianCalendar calendar = startOfDay(reference);
  15. calendar.add(Calendar.DAY_OF_YEAR, 1);
  16. return calendar;
  17. }
  18. public static GregorianCalendar startOfWeek(GregorianCalendar reference) {
  19. final GregorianCalendar calendarWithMondayAsFirstDayOfWeek = startOfDay(reference);
  20. int daysToShiftToMonday = calculateDaysToShiftToMonday(calendarWithMondayAsFirstDayOfWeek);
  21. calendarWithMondayAsFirstDayOfWeek.add(Calendar.DAY_OF_YEAR, daysToShiftToMonday);
  22. return calendarWithMondayAsFirstDayOfWeek;
  23. }
  24. public static GregorianCalendar endOfWeek(GregorianCalendar reference) {
  25. final GregorianCalendar calendar = startOfWeek(reference);
  26. calendar.add(Calendar.DAY_OF_YEAR, 7);
  27. return calendar;
  28. }
  29. public static GregorianCalendar startOfMonth(GregorianCalendar reference) {
  30. final int year = reference.get(Calendar.YEAR);
  31. final int month = reference.get(Calendar.MONTH);
  32. return createCalendar(year, month, 1);
  33. }
  34. public static GregorianCalendar endOfMonth(GregorianCalendar reference) {
  35. final GregorianCalendar calendar = startOfMonth(reference);
  36. calendar.add(Calendar.MONTH, 1);
  37. return calendar;
  38. }
  39. public static int daysInMonth(long reference) {
  40. final GregorianCalendar timeInMonthAsCalendar = createCalendar(reference);
  41. return timeInMonthAsCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
  42. }
  43. public static GregorianCalendar createCalendar(long time) {
  44. final GregorianCalendar calendar = createCalendar();
  45. calendar.setTime(new Date(time));
  46. return calendar;
  47. }
  48. public static GregorianCalendar createCalendar(int year, int month, int day) {
  49. final GregorianCalendar calendar = createCalendar();
  50. calendar.set(year, month, day);
  51. return calendar;
  52. }
  53. private static GregorianCalendar createCalendar() {
  54. final GregorianCalendar calendar = new GregorianCalendar();
  55. calendar.clear();
  56. calendar.setFirstDayOfWeek(Calendar.MONDAY);
  57. return calendar;
  58. }
  59. private static int calculateDaysToShiftToMonday(GregorianCalendar reference) {
  60. final int dayOfWeek = reference.get(Calendar.DAY_OF_WEEK);
  61. int daysToShiftToMonday = Calendar.MONDAY - dayOfWeek;
  62. if (dayOfWeek < reference.getFirstDayOfWeek()) {
  63. daysToShiftToMonday = daysToShiftToMonday - 7;
  64. }
  65. return daysToShiftToMonday;
  66. }
  67. }