这个问题在这里已经有了答案:
datetimeparse异常(1个答案)
9天前关门了。
我尝试了几种方法,包括javajoda-time、date-time-with-locale和commons-lang,但无法格式化这个日期。
输入 Mon Dec 28 15:18:16 UTC 2020
##输出
所需输出格式 yyyy-MM-dd HH:mm:ss.SSS
当我使用像 EEE MMM dd HH:mm:ss Z YYYY
日期离我还有几天,时区似乎完全错了。
格式化程序:
private static final DateTimeFormatter DATE_TIME_FORMATTER =
DateTimeFormatter
.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")
.withLocale(Locale.US)
.withZone(ZoneId.systemDefault());
DateUtils.parseDate (Optional
.ofNullable(record)
.map(CustomerModel::getCustomerAudit)
.map(customerAudit::getCreated)
.map(auditItem::getDate).get ().toString (), "EEE MMM dd HH:mm:ss YYYY")
4条答案
按热度按时间llew8vvj1#
对我来说很好。
输出为
我错过什么了吗?
b91juud32#
在调试解析问题时,如果可能,请反转操作并生成要解析的文本,以验证解析规则,即日期格式字符串。这适用于日期解析、jaxb解析和任何其他双向(反)序列化操作。它使查找转换规则问题变得更加容易。
那么,让我们检查问题中的格式字符串,以及显示的日期值:
输出
哎呀!这不符合预期的输出,即我们希望解析的输入:
出什么事了?
这一年错了,因为它应该是
uuuu
(年),不是YYYY
(基于周的年份)。时区错了,因为
Z
不支持文本表示。使用VV
或者z
相反。输出
如您所见,它现在被正确地解析了。
jbose2ul3#
问题中的代码没有什么意义:
它正在格式化一个
Date
值到文本使用toString()
,只是想把它解析回去。它正在使用
Optional
对于简单的空处理(这是不鼓励的),但是无条件调用get()
,意思是null
值仍将引发异常。代码应为:
这当然使整个问题毫无意义。
wbgh16ku4#
你试过simpledateformat吗?
时区: