我有一个 Flutter 应用程序需要向我的 Spring Boot 应用程序发送发布请求。发送的对象必须具有与 ZonedDateTime java 类兼容的 json 字符串格式的日期。
模式应为:yyyy-MM-ddTHH:mm[:ss[.S]]ZZ[{ZoneId}]
正确格式化日期的示例:
{
'date':'2007-12-03T10:15:30+01:00[Europe/Paris]'
}
我尝试在 pub.dev 中使用 time_machine 0.9.9
库,但它没有生成正确的模式。这是一个例子:
import 'package:time_machine/time_machine.dart';
Map<String, dynamic> toJson() => <String, dynamic>{
'date': '${Instant.now().inLocalZone()}'
}
生成:
{
"date":"2019-08-07T22:24:54 UTC (+00)"
}
Spring boot应用程序抛出异常:
org.springframework.messaging.converter.MessageConversionException:无法读取 JSON:无法从字符串“2019-08-07T22:24:54 UTC (+00)”反序列化“java.time.ZonedDateTime”类型的值": 无法反序列化 java.time.ZonedDateTime: (java.time.format.DateTimeParseException) 无法在索引 19 处解析文本 '2019-08-07T22:24:54 UTC (+00)'
最佳答案
如果您仅使用 Instant.now()
而不使用 .inLocalZone()
,您将得到类似 2019-08-07T22:24:54Z
code>,这对于您的 Spring Boot 应用程序来说应该没问题。
2019-08-07T22:24:54Z
是 ISO 8601 格式,它是 java.time API 中现代 Java 日期和时间类的默认格式。因此 Java ZonedDateTime
可以很好地解析它。错误消息表示 ZonedDateTime
无法解析您从 inLocalZone()
获取的字符串,引用为 2019-08-07T22:24:54 UTC ( +00)
。
这最初是作为评论中的猜测发布的,但另一位用户确认这对他/她有效,之后我发布了这个答案。
关于json - 如何将flutter中的日期解析为与Java ZonedDateTime兼容的json字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403120/