1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.lang3.time;
19
20 import java.time.LocalDate;
21 import java.time.LocalDateTime;
22 import java.time.OffsetDateTime;
23 import java.time.ZoneId;
24 import java.time.ZonedDateTime;
25 import java.util.Calendar;
26 import java.util.Locale;
27 import java.util.Locale.Category;
28 import java.util.Map;
29 import java.util.Objects;
30
31
32
33
34
35
36 public class CalendarUtils {
37
38
39
40
41
42
43
44 public static final CalendarUtils INSTANCE = getInstance();
45
46
47
48
49
50
51
52 public static CalendarUtils getInstance() {
53 return new CalendarUtils(Calendar.getInstance());
54 }
55
56
57
58
59
60
61
62
63 static CalendarUtils getInstance(final Locale locale) {
64 return new CalendarUtils(Calendar.getInstance(locale), locale);
65 }
66
67
68
69
70
71
72
73
74 public static LocalDateTime toLocalDateTime(final Calendar calendar) {
75 return LocalDateTime.ofInstant(calendar.toInstant(), toZoneId(calendar));
76 }
77
78
79
80
81
82
83
84
85 public static OffsetDateTime toOffsetDateTime(final Calendar calendar) {
86 return OffsetDateTime.ofInstant(calendar.toInstant(), toZoneId(calendar));
87 }
88
89
90
91
92
93
94
95
96 public static ZonedDateTime toZonedDateTime(final Calendar calendar) {
97 return ZonedDateTime.ofInstant(calendar.toInstant(), toZoneId(calendar));
98 }
99
100 private static ZoneId toZoneId(final Calendar calendar) {
101 return calendar.getTimeZone().toZoneId();
102 }
103
104 private final Calendar calendar;
105
106 private final Locale locale;
107
108
109
110
111
112
113 public CalendarUtils(final Calendar calendar) {
114 this(calendar, Locale.getDefault());
115 }
116
117
118
119
120
121
122 CalendarUtils(final Calendar calendar, final Locale locale) {
123 this.calendar = Objects.requireNonNull(calendar, "calendar");
124 this.locale = Objects.requireNonNull(locale, "locale");
125 }
126
127
128
129
130
131
132 public int getDayOfMonth() {
133 return calendar.get(Calendar.DAY_OF_MONTH);
134 }
135
136
137
138
139
140
141
142 public int getDayOfYear() {
143 return calendar.get(Calendar.DAY_OF_YEAR);
144 }
145
146
147
148
149
150
151 public int getMonth() {
152 return calendar.get(Calendar.MONTH);
153 }
154
155
156
157
158
159
160 String[] getMonthDisplayNames(final int style) {
161
162
163 final Map<String, Integer> displayNames = calendar.getDisplayNames(Calendar.MONTH, style, locale);
164 if (displayNames == null) {
165 return null;
166 }
167 final String[] monthNames = new String[displayNames.size()];
168 displayNames.forEach((k, v) -> monthNames[v] = k);
169 return monthNames;
170 }
171
172
173
174
175
176 String[] getStandaloneLongMonthNames() {
177 return getMonthDisplayNames(Calendar.LONG_STANDALONE);
178 }
179
180
181
182
183
184 String[] getStandaloneShortMonthNames() {
185 return getMonthDisplayNames(Calendar.SHORT_STANDALONE);
186 }
187
188
189
190
191
192
193 public int getYear() {
194 return calendar.get(Calendar.YEAR);
195 }
196
197
198
199
200
201
202
203 public LocalDate toLocalDate() {
204 return toLocalDateTime().toLocalDate();
205 }
206
207
208
209
210
211
212
213 public LocalDateTime toLocalDateTime() {
214 return toLocalDateTime(calendar);
215 }
216
217
218
219
220
221
222
223 public OffsetDateTime toOffsetDateTime() {
224 return toOffsetDateTime(calendar);
225 }
226
227
228
229
230
231
232
233 public ZonedDateTime toZonedDateTime() {
234 return toZonedDateTime(calendar);
235 }
236
237 }