DateUtil.java
5.54 KB
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
package com.infoloop.tianting.utils;
import org.apache.commons.lang3.time.DateUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public final class DateUtil extends DateUtils {
public final static ZoneId CHINA_ZONE = ZoneId.of("Asia/Shanghai");
public final static DateTimeFormatter YYYY = DateTimeFormatter
.ofPattern("yyyy")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YM = DateTimeFormatter
.ofPattern("yyyyMM")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter Y_M = DateTimeFormatter
.ofPattern("yyyy-MM")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YYYY_MM_LEFT_SYMBOL = DateTimeFormatter
.ofPattern("yyyy/MM")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YMD = DateTimeFormatter
.ofPattern("yyyyMMdd")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YYYY_MM_DD = DateTimeFormatter
.ofPattern("yyyy-MM-dd")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YYYY_MM_DD_UTC = DateTimeFormatter
.ofPattern("yyyy-MM-dd");
public final static DateTimeFormatter YYYY_MM_DD_LEFT_SYMBOL = DateTimeFormatter
.ofPattern("yyyy/MM/dd")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter MM_DD_CN = DateTimeFormatter
.ofPattern("MM月dd日")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter HH_MM_SS = DateTimeFormatter
.ofPattern("HH:mm:ss")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YYYY_MM_DD_HH_MM = DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YYYY_MM_DD_HH_MM_LEFT_SYMBOL = DateTimeFormatter
.ofPattern("yyyy/MM/dd HH:mm")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YMDHMS = DateTimeFormatter
.ofPattern("yyyyMMddHHmmss")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter Y_M_D_H_M_S = DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm:ss")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter Y_M_D_H_M_S_LEFT_SYMBOL = DateTimeFormatter
.ofPattern("yyyy/MM/dd HH:mm:ss")
.withZone(CHINA_ZONE);
public final static DateTimeFormatter YMDHMSSSS = DateTimeFormatter
.ofPattern("yyyyMMddHHmmssSSS")
.withZone(CHINA_ZONE);
private static final String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
private DateUtil() {
}
public static String formatDate(final long epochMillis) {
if (epochMillis == 0) {
return null;
}
return ZonedDateTime
.ofInstant(Instant.ofEpochMilli(epochMillis), ZoneOffset.UTC.normalized())
.format(DateTimeFormatter.ISO_INSTANT);
}
public static String formatDate(final long epochMillis, DateTimeFormatter formatter) {
if (epochMillis == 0L) {
return null;
}
return Instant.ofEpochMilli(epochMillis).atZone(CHINA_ZONE)
.format(formatter);
}
public static String formatDateOfUtc(final long epochMillis, DateTimeFormatter formatter) {
if (epochMillis == 0L) {
return null;
}
return Instant.ofEpochMilli(epochMillis).atOffset(ZoneOffset.UTC)
.format(formatter);
}
public static String formatDate(final LocalDate localDate, DateTimeFormatter formatter) {
if (localDate == null) {
return null;
}
return formatter.format(localDate);
}
public static String formatDate(final LocalDateTime localDateTime, DateTimeFormatter formatter) {
if (localDateTime == null) {
return null;
}
return formatter.format(localDateTime);
}
public static Long toEpochMilli(final String utcDate) {
if (utcDate == null || utcDate.isEmpty()) {
return null;
}
return Instant.parse(utcDate).toEpochMilli();
}
/**
* 日期型字符串转化为日期 格式
*/
public static Date parseDate(Object str) {
if (str == null) {
return null;
}
try {
return parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
public static String parseDateToStr(final String format, final Date date) {
return new SimpleDateFormat(format).format(date);
}
/**
* 增加 LocalDateTime ==> Date
*/
public static Date toDate(LocalDateTime temporalAccessor) {
ZonedDateTime zdt = temporalAccessor.atZone(CHINA_ZONE);
return Date.from(zdt.toInstant());
}
/**
* 增加 LocalDate ==> Date
*/
public static Date toDate(LocalDate temporalAccessor) {
LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
return toDate(localDateTime);
}
}