gpt4 book ai didi

java - DateFormatter 那个不挑剔?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:03:07 26 4
gpt4 key购买 nike

有谁知道 Java 中的 DateFormatter 不是那么挑剔?我的意思是我可以为它提供多种格式的日期,如果我提供它这样的格式:

yyyy-MM-dd HH:mm:ss Z

用户可以输入:

2010-11-02 10:46:05 -0600
or
2010-11-02 10:46:05
or
2010-11-02 10:46
or
2010-11-02
or
2010-11-02 -0600

我可以创建一个配置有 DateFormat 对象列表的 DataFormat 实现,并使我的实现遍历列表中的每个对象,直到有人能够解析日期。所以,如果有人知道现有的日期格式化库比 Java 提供的更不挑剔/更灵活,我真的很好奇。

最佳答案

看起来每个部分都有一个非常规则的格式,只是这些部分是可选的。我会使用一个包含每个部分的正则表达式(有些是可选的)。匹配该正则表达式并获取每个部分的组。然后将它们以最完整的形式(“2010-11-02 10:46:05 -0600”)放在一起,并让 DateFormatter 对其进行解析。这样您还可以控制部件的默认值(如果它们丢失了)。

这是一些代码:

    Pattern p = Pattern
.compile("(\\d{4}-\\d{2}-\\d{2})\\s*(\\d{2}:\\d{2})?(:\\d{2})?\\s*(\\+|-\\d{4})?");
String[] strs = { "2010-11-02 10:46:05 -0600", "2010-11-02 10:46:05",
"2010-11-02 10:46", "2010-11-02", "2010-11-02 -0600" };
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss Z");
for (String s : strs) {
Matcher m = p.matcher(s);
if (m.matches()) {
String hrmin = m.group(2) == null ? "00:00" : m.group(2);
String sec = m.group(3) == null ? ":00" : m.group(3);
String z = m.group(4) == null ? "+0000" : m.group(4);
String t = String.format("%s %s%s %s", m.group(1), hrmin, sec,
z);
System.out.println(s + " : " + format.parse(t));
}
}

输出:

2010-11-02 10:46:05 -0600 : Tue Nov 02 11:46:05 CDT 2010
2010-11-02 10:46:05 : Tue Nov 02 05:46:05 CDT 2010
2010-11-02 10:46 : Tue Nov 02 05:46:00 CDT 2010
2010-11-02 : Mon Nov 01 19:00:00 CDT 2010
2010-11-02 -0600 : Tue Nov 02 01:00:00 CDT 2010

关于java - DateFormatter 那个不挑剔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4079462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com