刘光辉
12 小时以前 34981c30a78e8bbd7791131059a9210f9928b62c
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
package jnpf.base.util;
 
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import jnpf.util.DateUtil;
 
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
/**
 * 时间格式 常量
 */
public class DateTimeFormatConstant {
    DateTimeFormatConstant() {
    }
 
    public static final String YEAR = "yyyy";
    public static final String YEAR_MONTH = "yyyy-MM";
    public static final String YEAR_MONTH_DATE = "yyyy-MM-dd";
    public static final String YEAR_MONTH_DHM = "yyyy-MM-dd HH:mm";
    public static final String YEAR_MONTH_DHMS = "yyyy-MM-dd HH:mm:ss";
    public static final String HOUR_MINUTE = "HH:mm";
    public static final String HOUR_MINUTE_SECOND = "HH:mm:ss";
    private static final Pattern YEAR_PATTERN = Pattern.compile("^\\d{4}$");
    private static final Pattern YEAR_MONTH_PATTERN = Pattern.compile("^(\\d{4})-(\\d{1,2})$");
    private static final Pattern YEAR_MONTH_DATE_PATTERN = Pattern.compile("^(\\d{4})-(\\d{1,2})-(\\d{1,2})$");
 
    /**
     * 时间格式忽略大小写
     *
     * @param otherFormat
     * @return 返回固定格式
     */
    public static String getFormat(String otherFormat) {
        if (YEAR.equalsIgnoreCase(otherFormat)) {
            return YEAR;
        }
        if (YEAR_MONTH.equalsIgnoreCase(otherFormat)) {
            return YEAR_MONTH;
        }
        if (YEAR_MONTH_DATE.equalsIgnoreCase(otherFormat)) {
            return YEAR_MONTH_DATE;
        }
        if (YEAR_MONTH_DHM.equalsIgnoreCase(otherFormat)) {
            return YEAR_MONTH_DHM;
        }
        if (YEAR_MONTH_DHMS.equalsIgnoreCase(otherFormat)) {
            return YEAR_MONTH_DHMS;
        }
        if (HOUR_MINUTE.equalsIgnoreCase(otherFormat)) {
            return HOUR_MINUTE;
        }
        if (HOUR_MINUTE_SECOND.equalsIgnoreCase(otherFormat)) {
            return HOUR_MINUTE_SECOND;
        }
        return otherFormat;
    }
 
    /**
     * 数据库查询时间字段-转换成long
     * 不同数据库查询结果的对象不同
     *
     * @param dateObj
     * @return long
     */
    public static Long getDateObjToLong(Object dateObj) {
        LocalDateTime dateTime = null;
        if (ObjectUtil.isNotEmpty(dateObj)) {
            if (dateObj instanceof LocalDateTime) {
                dateTime = (LocalDateTime) dateObj;
            } else if (dateObj instanceof Timestamp) {
                dateTime = ((Timestamp) dateObj).toLocalDateTime();
            } else if (dateObj instanceof Long) {
                dateTime = LocalDateTimeUtil.of(new Date(Long.parseLong(dateObj.toString())));
            } else {
                dateTime = parseDateText(dateObj.toString());
            }
        }
        return dateTime != null ? DateUtil.localDateTime2Millis(dateTime) : null;
    }
 
    public static boolean isYearMonthText(Object value) {
        return normalizeYearMonthText(value) != null;
    }
 
    public static String normalizeYearMonthText(Object value) {
        if (!(value instanceof String)) {
            return null;
        }
        String dateText = ((String) value).trim().replace("/", "-");
        Matcher yearMonthMatcher = YEAR_MONTH_PATTERN.matcher(dateText);
        if (!yearMonthMatcher.matches()) {
            return null;
        }
        return yearMonthMatcher.group(1) + "-" + padDatePart(yearMonthMatcher.group(2));
    }
 
    private static LocalDateTime parseDateText(String value) {
        String dateText = value == null ? "" : value.trim().replace("/", "-");
        if (dateText.isEmpty()) {
            return null;
        }
        if (YEAR_PATTERN.matcher(dateText).matches()) {
            return LocalDateTime.parse(dateText + "-01-01 00:00:00", DateTimeFormatter.ofPattern(YEAR_MONTH_DHMS));
        }
        String yearMonthText = normalizeYearMonthText(dateText);
        if (yearMonthText != null) {
            return LocalDateTime.parse(yearMonthText + "-01 00:00:00", DateTimeFormatter.ofPattern(YEAR_MONTH_DHMS));
        }
        Matcher yearMonthDateMatcher = YEAR_MONTH_DATE_PATTERN.matcher(dateText);
        if (yearMonthDateMatcher.matches()) {
            return LocalDateTime.parse(yearMonthDateMatcher.group(1) + "-" + padDatePart(yearMonthDateMatcher.group(2)) + "-" + padDatePart(yearMonthDateMatcher.group(3)) + " 00:00:00", DateTimeFormatter.ofPattern(YEAR_MONTH_DHMS));
        }
        return LocalDateTimeUtil.of(cn.hutool.core.date.DateUtil.parse(dateText));
    }
 
    private static String padDatePart(String value) {
        return String.format("%02d", Integer.parseInt(value));
    }
 
}