gpt4 book ai didi

java - SimpleDateFormat 中的解析不准确

转载 作者:行者123 更新时间:2023-12-01 23:15:38 26 4
gpt4 key购买 nike

如何解析始终具有不同日期格式的字符串(有时为“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd'T'HH:mm”或“yyyy-MM- dd HH:mm")?

如果我使用以下代码 - 如果值中的字符串具有“yyyy-MM-dd HH:mm”以外的格式,则会失败

public static Date test(String value) throws ... {

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return df.parse(value);


}

最佳答案

我建议您尝试解析每种特定格式,捕获 ParseException 并转到下一种格式:

private static final String[] patterns = {
"yyyy-MM-dd HH:mm",
"yyyy-MM-dd'T'HH:mm",
"yyyy-MM-dd HH:mm"
};

public static Date test(String value) throws ... {
for (String pattern : patterns) {
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
return df.parse(value);
} catch (ParseException e) {
// No-op - move onto the next pattern
}
}
// Do whatever you want here - throw ParseException, or return null
}

这很简单,但滥用了异常。您可以使用更晦涩的parse(String, ParsePosition)调用来代替:

public static Date test(String value) throws ... {
for (String pattern : patterns) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = df.parse(value, new ParsePosition(0));
if (date != null) {
return date;
}
}
// Do whatever you want here - throw ParseException, or return null
}

可能表现更好 - 您必须对其进行基准测试才能确定。

不幸的是,您必须在每次调用时重新创建 SimpleDateFormat 对象,但这是一个非线程安全的问题。另一种选择是使用 Joda Time - 总体来说,这是一个更好的 API - 但目前还不清楚如何在那里实现无异常方法。 (这很可能,只是又有点晦涩。我怀疑 DateTimeFormatter.parseInto 会是你的 friend 。)

关于java - SimpleDateFormat 中的解析不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21264395/

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