/
DatetimeFormat.java
80 lines (72 loc) · 3.22 KB
/
DatetimeFormat.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package me.mourjo.jamboree.datetime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
public class DatetimeFormat {
static final DateTimeFormatter unparser = DateTimeFormatter.RFC_1123_DATE_TIME;
static final List<DateTimeFormatter> FORMATTERS = List.of(
DateTimeFormatter.ofPattern("dd MM yyyy"),
DateTimeFormatter.ofPattern("dd-MM-yyyy"),
DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"),
DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm z"),
DateTimeFormatter.ofPattern("dd MM yyyy HH:mm"),
DateTimeFormatter.ofPattern("dd MM yyyy HH:mm z"),
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"),
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm z"),
DateTimeFormatter.ofPattern("yyyy-MM-dd"),
DateTimeFormatter.ofPattern("HH:mm dd-MM-yyyy"),
DateTimeFormatter.ofPattern("HH:mm dd-MM-yyyy z"),
DateTimeFormatter.ofPattern("HH:mm dd MM yyyy"),
DateTimeFormatter.ofPattern("HH:mm dd MM yyyy z"),
DateTimeFormatter.ofPattern("HH:mm, dd-MM-yyyy"),
DateTimeFormatter.ofPattern("HH:mm, dd-MM-yyyy z"),
DateTimeFormatter.ofPattern("HH:mm, dd MM yyyy"),
DateTimeFormatter.ofPattern("HH:mm, dd MM yyyy z"),
DateTimeFormatter.ofPattern("HH:mm, dd MM yyyy"),
DateTimeFormatter.ofPattern("HH:mm, dd MM yyyy z"),
DateTimeFormatter.RFC_1123_DATE_TIME,
DateTimeFormatter.BASIC_ISO_DATE,
DateTimeFormatter.ISO_LOCAL_DATE,
DateTimeFormatter.ISO_OFFSET_DATE,
DateTimeFormatter.ISO_DATE,
DateTimeFormatter.ISO_LOCAL_TIME,
DateTimeFormatter.ISO_OFFSET_TIME,
DateTimeFormatter.ISO_TIME,
DateTimeFormatter.ISO_LOCAL_DATE_TIME,
DateTimeFormatter.ISO_OFFSET_DATE_TIME,
DateTimeFormatter.ISO_ZONED_DATE_TIME,
DateTimeFormatter.ISO_DATE_TIME,
DateTimeFormatter.ISO_ORDINAL_DATE,
DateTimeFormatter.ISO_WEEK_DATE,
DateTimeFormatter.ISO_INSTANT,
DateTimeFormatter.RFC_1123_DATE_TIME
);
static private final Logger logger = LoggerFactory.getLogger(DatetimeFormat.class);
public static ZonedDateTime parse(String dateTime) {
var formatter = FORMATTERS.stream().filter(fmt -> {
try {
LocalDateTime.parse(dateTime, fmt);
} catch (Exception e) {
return false;
}
return true;
}).findFirst();
if (formatter.isPresent()) {
try {
return ZonedDateTime.parse(dateTime, formatter.get());
} catch (Exception e) {
return ZonedDateTime.of(LocalDateTime.parse(dateTime, formatter.get()), ZoneId.of("Etc/UTC"));
}
} else {
logger.warn("Could not parse {}, falling back to current time", dateTime);
return ZonedDateTime.now();
}
}
public static String unparse(ZonedDateTime ts) {
return ts.format(unparser);
}
}