/woloc/src/main/java/org/richardsson/woloc/time/TimeUtil.java
Java | 92 lines | 67 code | 25 blank | 0 comment | 1 complexity | f5f6889afeb33dd8e9b97dd5194412d6 MD5 | raw file
1package org.richardsson.woloc.time;
2
3import java.util.Calendar;
4import java.util.Date;
5import java.util.GregorianCalendar;
6
7public class TimeUtil {
8 private TimeUtil() {}
9
10 public static GregorianCalendar startOfDay(GregorianCalendar reference) {
11 final int year = reference.get(Calendar.YEAR);
12 final int month = reference.get(Calendar.MONTH);
13 final int day = reference.get(Calendar.DAY_OF_MONTH);
14
15 return createCalendar(year, month, day);
16 }
17
18 public static GregorianCalendar endOfDay(GregorianCalendar reference) {
19 final GregorianCalendar calendar = startOfDay(reference);
20 calendar.add(Calendar.DAY_OF_YEAR, 1);
21
22 return calendar;
23 }
24
25 public static GregorianCalendar startOfWeek(GregorianCalendar reference) {
26 final GregorianCalendar calendarWithMondayAsFirstDayOfWeek = startOfDay(reference);
27
28 int daysToShiftToMonday = calculateDaysToShiftToMonday(calendarWithMondayAsFirstDayOfWeek);
29 calendarWithMondayAsFirstDayOfWeek.add(Calendar.DAY_OF_YEAR, daysToShiftToMonday);
30
31 return calendarWithMondayAsFirstDayOfWeek;
32 }
33
34 public static GregorianCalendar endOfWeek(GregorianCalendar reference) {
35 final GregorianCalendar calendar = startOfWeek(reference);
36
37 calendar.add(Calendar.DAY_OF_YEAR, 7);
38
39 return calendar;
40 }
41
42 public static GregorianCalendar startOfMonth(GregorianCalendar reference) {
43 final int year = reference.get(Calendar.YEAR);
44 final int month = reference.get(Calendar.MONTH);
45
46 return createCalendar(year, month, 1);
47 }
48
49 public static GregorianCalendar endOfMonth(GregorianCalendar reference) {
50 final GregorianCalendar calendar = startOfMonth(reference);
51 calendar.add(Calendar.MONTH, 1);
52
53 return calendar;
54 }
55
56 public static int daysInMonth(long reference) {
57 final GregorianCalendar timeInMonthAsCalendar = createCalendar(reference);
58 return timeInMonthAsCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
59 }
60
61 public static GregorianCalendar createCalendar(long time) {
62 final GregorianCalendar calendar = createCalendar();
63 calendar.setTime(new Date(time));
64
65 return calendar;
66 }
67
68 public static GregorianCalendar createCalendar(int year, int month, int day) {
69 final GregorianCalendar calendar = createCalendar();
70 calendar.set(year, month, day);
71
72 return calendar;
73 }
74
75 private static GregorianCalendar createCalendar() {
76 final GregorianCalendar calendar = new GregorianCalendar();
77 calendar.clear();
78 calendar.setFirstDayOfWeek(Calendar.MONDAY);
79 return calendar;
80 }
81
82 private static int calculateDaysToShiftToMonday(GregorianCalendar reference) {
83 final int dayOfWeek = reference.get(Calendar.DAY_OF_WEEK);
84
85 int daysToShiftToMonday = Calendar.MONDAY - dayOfWeek;
86 if (dayOfWeek < reference.getFirstDayOfWeek()) {
87 daysToShiftToMonday = daysToShiftToMonday - 7;
88 }
89
90 return daysToShiftToMonday;
91 }
92}