java如何将JSR310日期解析为即时?
我试图用JSR-310时间解析"2020-01-12+01:00"
我通过DateTimeFormatter.ofPattern("yyyy-MM-ddVV")
读取它,但是现在如果我想通过Instant.from(DateTimeFormatter.ofPattern("yyyy-MM-ddVV").parse("...")
将其转换为瞬间,它会抛出它抱怨time
为空的地方
这是理所当然的,但是,我想从中得到即时信息,即epochMillis,这样我就可以将long
序列化到数据库中
有办法绕过它吗?基本上,我想将"2020-01-12+01:00"
扩展为"2020-01-12T00:00.000+01:00"
,并像往常一样将其解析为Instant
# 1 楼答案
只要你知道怎么做就很容易了。我们需要的格式化程序是内置的。有一个复杂的事实是没有一个类型来解析字符串,没有
OffsetDate
。我提出了两种解决这一问题的办法此代码段的输出为:
我们很少需要直接使用
TemporalAccessor
接口,它被认为是低级的。这也不是唯一的途径。另一个好的选择是定义一天中的默认时间,这样我们就可以直接解析为Instant
:结果和以前一样
# 2 楼答案
您需要使用^{} ,指定^{} 格式和一天中的default时间(午夜1):
1)
ChronoField
可以是一天中的任何时间字段,即HOUR_OF_DAY
、CLOCK_HOUR_OF_DAY
、MINUTE_OF_DAY
、SECOND_OF_DAY
、MILLI_OF_DAY
、MICRO_OF_DAY
或NANO_OF_DAY
输出
如果要保留时区偏移,则需要使用^{} (或^{} )而不是^{} :
输出(来自OffsetDateTime和ZonedDateTime)
# 3 楼答案
您可以使用上面的
Formatter
使用LocalDate.parse(dateString, formatter)
来提供一个LocalDate
实例LocalDate
可以在当天的任何时候给你一个LocalDateTime
,但是(例如)你可以从中得到the start of dayLocalDateTime
有一个^{Instant
Instant
有一个^{long