PC
2024-03-31 608f20e0d5d8f95d9bbb917e95e2913682deb77d
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
package com.qianwen.core.tool.metadata.types;
 
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.qianwen.core.tool.metadata.Converter;
import com.qianwen.core.tool.metadata.DataType;
import com.qianwen.core.tool.metadata.ValidateResult;
import com.qianwen.core.tool.time.DateFormatter;
import com.qianwen.core.tool.utils.Func;
import com.qianwen.core.tool.utils.StringPool;
 
/* loaded from: blade-core-tool-9.3.0.0-SNAPSHOT.jar:org/springblade/core/tool/metadata/types/DateTimeType.class */
public class DateTimeType extends AbstractType<DateTimeType> implements DataType, Converter<Date> {
    public static final String ID = "date";
    public static final String TIMESTAMP_FORMAT = "timestamp";
    private String format = TIMESTAMP_FORMAT;
    private ZoneId zoneId = ZoneId.systemDefault();
    private DateTimeFormatter formatter;
    private static final Logger log = LoggerFactory.getLogger(DateTimeType.class);
    public static final DateTimeType GLOBAL = new DateTimeType();
 
    public void setFormat(final String format) {
        this.format = format;
    }
 
    public void setZoneId(final ZoneId zoneId) {
        this.zoneId = zoneId;
    }
 
    public void setFormatter(final DateTimeFormatter formatter) {
        this.formatter = formatter;
    }
 
    static {
        DateFormatter.supportFormatter.add(new ISODateTimeFormatter());
    }
 
    public String getFormat() {
        return this.format;
    }
 
    public ZoneId getZoneId() {
        return this.zoneId;
    }
 
    public DateTimeType timeZone(ZoneId zoneId) {
        this.zoneId = zoneId;
        return this;
    }
 
    public DateTimeType format(String format) {
        this.format = format;
        getFormatter();
        return this;
    }
 
    @Override // org.springblade.core.tool.metadata.Metadata
    public String getId() {
        return ID;
    }
 
    @Override // org.springblade.core.tool.metadata.Metadata
    public String getName() {
        return "时间";
    }
 
    protected DateTimeFormatter getFormatter() {
        if (this.formatter == null && !TIMESTAMP_FORMAT.equals(this.format)) {
            this.formatter = DateTimeFormatter.ofPattern(this.format);
        }
        return this.formatter;
    }
 
    @Override // org.springblade.core.tool.metadata.DataType
    public ValidateResult validate(Object value) {
        Object value2 = convert(value);
        if (value2 == null) {
            return ValidateResult.fail("不是合法的时间格式");
        }
        return ValidateResult.success(value2);
    }
 
    @Override // org.springblade.core.tool.metadata.FormatSupport
    public String format(Object value) {
        try {
            if (TIMESTAMP_FORMAT.equals(this.format)) {
                return String.valueOf(convert(value).getTime());
            }
            Date dateValue = convert(value);
            if (dateValue == null) {
                return StringPool.EMPTY;
            }
            return LocalDateTime.ofInstant(dateValue.toInstant(), this.zoneId).format(getFormatter());
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            return StringPool.EMPTY;
        }
    }
 
    /* JADX WARN: Can't rename method to resolve collision */
    @Override // org.springblade.core.tool.metadata.Converter
    public Date convert(Object value) {
        if (value instanceof Instant) {
            return Date.from((Instant) value);
        }
        if (value instanceof LocalDateTime) {
            return Date.from(((LocalDateTime) value).atZone(this.zoneId).toInstant());
        }
        if (value instanceof Date) {
            return (Date) value;
        }
        if (value instanceof Number) {
            return new Date(((Number) value).longValue());
        }
        if (value instanceof String) {
            if (Func.isNumeric(value.toString())) {
                return new Date(Long.parseLong((String) value));
            }
            Date data = DateFormatter.fromString((String) value);
            if (data != null) {
                return data;
            }
            DateTimeFormatter formatter = getFormatter();
            if (null == formatter) {
                throw new IllegalArgumentException("unsupported date format:" + value);
            }
            return Date.from(LocalDateTime.parse((String) value, formatter).atZone(this.zoneId).toInstant());
        }
        throw new IllegalArgumentException("can not format datetime :" + value);
    }
}