【发布时间】:2021-11-25 15:33:45
【问题描述】:
所以我一直在寻找如何正确解析传入的日期时间,问题是这个字符串也包含显然由于某种原因无法解析的区域。
举一个传入日期时间字符串的例子:
2021-10-05T10:00:00.0000000
现在我尝试了以下操作:
var dateTimeString = "2021-10-05T10:00:00.0000000"
var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
var date = LocalDate.parse(dateTimeString, formatter)
我尝试用空和 ZZZZ 替换 Z,但这不起作用我认为它不起作用,因为加号或减号不存在。仅供参考,由于 Microsoft Graph API 在检索日历事件时,我会收到这种格式的日期。
知道如何正确格式化此日期吗?
编辑:这来自 Microsoft Graph。基本上他们把日期当作一个对象:
"start": {
"dateTime": "2021-10-05T10:00:00.0000000",
"timeZone": "UTC"
}
这是解释此日期对象的文档页面:dateTimeTimeZone resource type。
更新:
我终于能够解决这个日期问题,我所做的是:
var inputDateTime = "2021-10-05T10:00:00.0000000"
var inputTimeZone = "UTC"
var zonedDateTime = ZonedDateTime.parse(
inputDateTime,
DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.of(inputTimeZone))
).withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime()
这样,日期将正确转换为正确的时区和正确的日期/时间。
【问题讨论】:
-
您到底想用
Z解析什么?我在"2021-10-05T10:00:00.0000000"中看不到任何区域偏移量。 -
时区是最后 4 位
-
没有加号也没有减号,这将如何解析为有效时区?好的,
0000将是 UTC,但其他区域呢? -
我知道,但这来自 Microsoft Graph,这不是我编造的。基本上他们把日期当作一个对象:
"start": {"dateTime": "2021-10-05T10:00:00.0000000", "timeZone": "UTC"} -
这是解释此日期对象的文档页面:docs.microsoft.com/en-us/graph/api/resources/…
标签: java kotlin java-time localdatetime datetimeformatter