PageRenderTime 25ms CodeModel.GetById 15ms app.highlight 8ms RepoModel.GetById 1ms app.codeStats 0ms

/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
 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}