Kotlin解析Microsoft Graph返回的日期时间字符串异常如何解决?
Microsoft Graph API 日历事件时间解析方案
原代码报错原因
- 自定义格式串中包含时区匹配符
Z,但Microsoft Graph返回的dateTimeTimeZone类型的时间字符串本身不携带时区偏移标识,时区是通过单独的timeZone字段返回,格式匹配失败 - 自定义格式串的
SSS仅支持匹配3位毫秒,而接口返回的时间字符串包含7位小数秒,手动写格式串适配可变长度的小数秒复杂度高 - 使用
LocalDate类型接收包含时分秒的完整时间字符串,类型不匹配
正确解析方案
Microsoft Graph返回的时间字符串完全符合ISO 8601标准格式,不需要自行编写格式串,直接使用内置的DateTimeFormatter.ISO_DATE_TIME解析即可,再结合接口返回的时区字段完成时区转换:
var inputDateTime = "2021-10-05T10:00:00.0000000" var inputTimeZone = "UTC" // 直接取接口返回的timeZone字段值即可 var zonedDateTime = ZonedDateTime.parse( inputDateTime, DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.of(inputTimeZone)) ).withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime()
以上代码可以直接将接口返回的对应时区时间转换为运行设备本地时区的对应时间。
内容的提问来源于stack exchange,提问作者Billy Cottrell
相关产品推荐
相关产品推荐

