【问题标题】:LocalDateTime.toString - can the format be configured in the environment?LocalDateTime.toString - 可以在环境中配置格式吗?
【发布时间】:2020-01-21 16:54:55
【问题描述】:

我的代码使用myTime.toString 将 LocalDateTime 保存为字符串。它在使用 Spring 转换器从 String 转换为 LocalDateTime 时被读回。任何地方都没有格式化,设置为使用系统默认值。

在一个环境中读取它,因为默认格式似乎不正确 (2019-03-01T11:51:07.017)

Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDateTime] for value '2020-01-13T07:00'; nested exception is java.time.format.DateTimeParseException: Text '2020-01-13T07:00' could not be parsed at index 16

此属性是否有任何系统范围的配置,或者我应该在任何地方显式格式化?

【问题讨论】:

  • 您可以在某处存储DateTimeFormatter 的实例并继续使用它。
  • 您是否在某处指定了明确的格式? LocalDateTime 类可以毫无错误地解析这两个输入(2019-03-01T11:51:07.0172020-01-13T07:00)。
  • 无任何格式。当我执行 toString 时,是否有一个环境属性说明默认值是什么?
  • 请检查docs.oracle.com/javase/8/docs/api/java/time/… 默认toString格式

标签: java spring date formatting environment


【解决方案1】:

此属性是否有任何系统范围的配置...

没有。

LocalDateTime.toString() 生成的格式是固定的,你不能改变,不能以任何方式改变。来自文档:

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

  • uuuu-MM-dd'T'HH:mm
  • uuuu-MM-dd'T'HH:mm:ss
  • uuuu-MM-dd'T'HH:mm:ss.SSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSS
  • uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS

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

因此,影响格式的唯一方法是控制LocalDateTime 中是否有任何秒数或秒数。

…还是我应该在任何地方都明确格式化?

我不确定这是否会对您有所帮助。正如 Andreas 在评论中所说,单参数 LocalDateTime.parse() 解析 2020-01-13T07:002019-03-01T11:51:07.017 都很好。对于您的问题,我能想到的唯一解释是使用默认格式以外的其他格式进行解析。

链接

【讨论】:

  • 知道了!我在规范中错过了,改为使用 LocalDateTime.parse
猜你喜欢
  • 2019-12-31
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多