首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java8 LocalDateTime在解析带有00秒的日期字符串值时丢弃了00秒值,如"2018-07-06 00:00:00“

Java8 LocalDateTime在解析带有00秒的日期字符串值时丢弃了00秒值,如"2018-07-06 00:00:00“
EN

Stack Overflow用户
提问于 2018-06-11 01:49:06
回答 4查看 11.2K关注 0票数 18

下面的代码(Java8)片段在使用LocalDateTime.parse,解析的日期内,当我的date time的秒值为零时,丢弃 date time的 seconds部分,如2018-07-10 00:00:00

代码语言:javascript
复制
final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
final LocalDateTime localDateTime = LocalDateTime.parse("2018-07-06 00:00:00", dateTimeFormatter);
final String lexicalDate = localDateTime.toString();
System.out.println("Lexical Date : "+ lexicalDate);
final XMLGregorianCalendar gregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(lexicalDate);
System.out.println("Gregorian Calendar : "+ gregorianCalendar);

Lexical Date打印为:

词法日期: 2018-07-10T00:00

而不是:

词法日期: 2018-07-10T00:00:00

现在,这将影响公历的日期值,当删除第二个日历时,将返回null。其他情况下,当秒值大于零时,它可以完美地工作。

代码语言:javascript
复制
javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(lexicalDate)

当由于解析的字符串中的00秒值而删除秒值时,上面的代码将返回null。

有没有人可以提供一个更好的方法来使用LocalDate时间来处理这个问题,否则它可能是Java8 LocalDateTime中的一个bug/有趣的控件。

请注意,我无法控制此日期值,它来自第三方平台。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-11 01:54:52

特性,而不是bug

您将看到LocalDateTime::toString方法使用的特定DateTimeFormatter的文档化行为。

摘录,我的重点是:

输出将为以下ISO-8601格式之一:

uuuu-mm-dd‘T’mm:mm

uuuu-mm-dd‘T’ss:mm:ss

uuuu-mm-dd‘T’dd:mm:ss.SSS

uuuu-mm-dd‘T’dd:mm:ss.SSSSSS

uuuu-mm-dd‘T’dd:mm:ss.SSSSSSSSS

使用的格式将是输出时间的全值的最短,其中省略的部分隐含为零

如果在生成表示LocalDateTime的值的字符串时需要其他行为,请使用不同的DateTimeFormatter并将其传递给LocalDateTime::format

代码语言:javascript
复制
String output = myLocalDateTime.format( someOtherFormatter ) ;

LocalDateTime没有“格式”,因为它不是文本。解析或生成特定格式的String对象是DateTimeFormatter的工作。

票数 18
EN

Stack Overflow用户

发布于 2018-06-11 01:59:59

您需要使用适当的格式化程序来格式化日期,而不是通过调用toString()来使用默认格式化程序。

代码语言:javascript
复制
final String lexicalDate = localDateTime.format(dateTimeFormatter);
票数 4
EN

Stack Overflow用户

发布于 2019-11-30 02:39:58

您可以使用下面的模式来实现所需的格式:

代码语言:javascript
复制
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssz");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50786482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档