3 回答
TA贡献1831条经验 获得超10个赞
我遇到的问题是它在解析中出错并出现异常,我想知道我是否做错了什么。
=> 是的,你确实在这样做。您首先需要将日期解析为实际格式,然后将其格式化为所需的格式。
例如:用于解析和格式化2018-05-11T21:03:51Z
DateFormat originalFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:MM:SS'z'", Locale.ENGLISH);
DateFormat targetFormat = new SimpleDateFormat("yyyy dd mm - HH:mm:ss");
Date date = originalFormat.parse("2018-05-11T21:03:51Z");
String formattedDate = targetFormat.format(date); // 2018 05 11 - 21:03:51
TA贡献1815条经验 获得超10个赞
java.time
DateTimeFormatter firstFormatteer
= DateTimeFormatter.ofPattern("d MMM uuuu H:mm:ss z", Locale.ENGLISH);
String firstDateString = "11 May 2018 21:03:51 GMT";
String secondDateString = "2018-05-11T21:03:51Z";
Instant firstInstant = firstFormatteer.parse(firstDateString, Instant::from);
Instant seoncdInstant = Instant.parse(secondDateString);
System.out.println("The strings are parsed into " + firstInstant + " and " + seoncdInstant);
输出是:
字符串被解析为 2018-05-11T21:03:51Z 和 2018-05-11T21:03:51Z
来自两个服务的字符串具有两种不同的格式,您能做的最好的事情就是以两种不同的方式处理它们。首先,定义一个与格式匹配的格式化程序。第二个是 ISO 8601 格式。Instant解析此格式时不需要任何显式格式化程序,因此这里我们不需要定义格式化程序。
要进行比较,例如:
if (firstInstant.isBefore(seoncdInstant)) {
System.out.println("The first date and time comes first");
} else if (firstInstant.equals(seoncdInstant)) {
System.out.println("The date and time is the same");
}
日期和时间相同
类Instant是类的现代替代品Date,它代表了一个时刻。
这个Date类设计得很糟糕,而且SimpleDateFormat非常麻烦,幸运的是它们都已经过时了。我建议您避免使用它们并使用 java.time(现代 Java 日期和时间 API)。
TA贡献1780条经验 获得超5个赞
这里:
SimpleDateFormat localDateFormat = new SimpleDateFormat("yyyy dd mm - HH:mm:ss");
该格式表示:4 年数字空格、2 天数字空格、2 个月数字 DASH 等等。
事情是:你的字符串日期都不是:
"11 May 2018 21:03:51 GMT" "2018-05-11T21:03:51Z"
看起来像那样。第一个是“dd M yyy ...”(不以年份开头),第二个使用“-”而不是“”作为初始日期的分隔符。
添加回答
举报