【发布时间】:2020-10-23 18:14:20
【问题描述】:
我有各种日期字符串,并想使用 java 以特定格式格式化
String arr[] = {"Jul 02,2020 ","15-10-2015 10:20:56","2015/10/26 12:10:39","27-04-2016 10:22:56","April 7, 2020"};
Arrays.asList(arr).forEach(date->{
try {
System.out.println(convertDate(date, "yyyy-MM-dd hh:mm:ss"));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
public static String getDateString(String date,String patternStr) throws ParseException {
if(StringUtils.isNotEmpty(date)&& StringUtils.isNotEmpty(patternStr)) {
SimpleDateFormat pattern = new SimpleDateFormat(patternStr);
Date dateObject =new Date(date);
return pattern.format(dateObject).toString();
}
return date;
}
但是我得到了一些日期值的解析异常。是否有任何通用方法来支持所有 input date value 。
【问题讨论】:
-
要从“某事 A”到“B”,您需要知道“某事 A”实际上是什么格式,否则您将失去确保有效对话所需的上下文。解决此类问题的“常见”方法是拥有一个“可接受的输入格式”的“列表”,然后您将获取每个项目并尝试根据该“可接受的输入格式”列表对其进行解析,直到您得到一个成功的结果,或者你用完了“可接受的输入格式”,这将代表你需要决定如何处理的边缘情况
-
我建议你不要使用
SimpleDateFormat和Date。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDateTime和DateTimeFormatter。即使你坚持使用Date,你仍然应该远离Date(String)构造函数。它自 1997 年以来已被弃用,因为它跨时区运行不可靠。 -
对于哪些字符串,您得到了不正确的结果?在这些情况下,预期的输出是什么?和观察到的输出?当询问不能按预期工作的代码时,请始终提供此信息。
-
@VictorS 虽然 Joda-Time 将是向前迈出的一大步,但我们可以通过转移到 java.time, the modern Java date and time API 来进一步迈出这一步。 Joda-Time 不再进一步开发,已被 java.time 正式取代。
标签: java date datetime datetime-format