当前位置: 首页 > 知识库问答 >
问题:

Java8 LocalDateTime在解析日期字符串值时删除00秒值,例如“2018-07-06 00:00:00”

督飞鸣
2023-03-14

当使用LocalDateTime.parse解析的日期中的秒值为零时,下面的代码(Java 8)片段删除我的日期时间的秒部分,如2018-07-10 00:00:00:

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);

词汇日期打印如下:

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

而不是:

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

现在,这影响了公历的日期值,当秒被删除时,该日期值返回null。其他情况下,当秒的值大于零时,它可以很好地工作。

javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(lexicalDate)

每当seconds值由于解析字符串中的00秒值而被删除时,上面的html" target="_blank">代码都返回null。

是否有人可以帮助您更好地使用LocalDate-time处理此问题,否则它可能是Java 8 LocalDateTime中的错误/有趣控件。

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

共有3个答案

柴凌
2023-03-14

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

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssz");
通沛
2023-03-14

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

final String lexicalDate = localDateTime.format(dateTimeFormatter);
钮才哲
2023-03-14

您看到了LocalDateTime::toString方法使用的特定DateTimeFormatter

摘录,我强调:

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

嗯,嗯,嗯

uuuu-MM-dd'T'HH:mm:ss

uuuu-MM-dd'T'HH:mm:ss.断续器

uuuu-MM-dd'T'HH:mm:ss。自我介绍

uuuu-MM-dd'T'HH:mm:ss。SSSSSSSSS

所使用的格式将是最短的,输出时间的完整值,其中省略的部分暗示为零。

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

String output = myLocalDateTime.format( someOtherFormatter ) ;

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

 类似资料:
  • 问题内容: (爪哇8)以下代码段的代码丢弃 秒部分 的我的 日期时间 时的秒值是 零 使用解析的时间内 LocalDateTime.parse ,如2018年7月10日00:00: 00 : 词法日期打印为: 词法日期:2018-07-10T00:00 代替: 词法日期:2018-07-10T00:00:00 现在,这会影响公历的日期值,该公历在删除第二个时将 返回null 。在其他情况下,如果秒

  • 问题内容: 我最近接手了一个十年前创建的旧项目。它使用MySQL 5.1。 除其他外,我需要将默认字符集从latin1更改为utf8。 例如,我有这样的表: 我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。 我下载了此数据库的副本并将其导入。 如果我尝试运行这样的查询: 我收到此错误: 我以为可以

  • 问题内容: 我需要在数据库上更改一些值。 我忘记为表格设置可空值,并且默认情况下将其设置为0000-00-00 00:00:00。 现在,我需要将该值转换为。 字段类型为“日期时间”。 我该怎么做? 我尝试使用典型的方法,但是它不起作用。 问题答案: 您首先需要将该列设置为可空: 然后更新值:

  • 我引用了许多题目,题目和我的题目相同,但它们的方法和问题不同,所以这个题目不是重复的。 我有一个表,其中是类型,并且具有默认值。 通过网站插入工作正常,但当我尝试通过插入任何值时,我得到以下错误。 版本为。还有一件事,最近我们的服务器已经从升级到。 下面是查询 在升级之后,我们就开始面临这个问题

  • 问题内容: 如何将字段的默认值设置为“ 0000-00-00 00:00:00”?如果我们不能使用“ 0000-00-00 00:00:00”作为默认值?什么是 基本 有效tiemdate? 例如,这是用于创建我的商品表的SQL, 运行此查询时出现此错误, 问题答案: 错误原因:SQL模式 您可以设置的默认值,或场特殊的“零”作为虚拟日期“0000-00-00”值,如果SQL模式允许它。对于低于5

  • 我想在MySQL中允许零日期。我已将更改为。 我已经在中更改了它。 然而,当我尝试插入数据时,我得到了错误, 数据截断:不正确的datetime值:“0000-00-00 00:00:00” MySQL版本为5.7.18。 这方面的任何想法都将大有帮助。