json - 如何将flutter中的日期解析为与Java ZonedDateTime兼容的json字符串

标签 json rest spring-boot flutter zoneddatetime

我有一个 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)

这最初是作为评论中的猜测发布的,但另一位用户确认这对他/她有效,之后我发布了这个答案。

链接。 Wikipedia article: ISO 8601

关于json - 如何将flutter中的日期解析为与Java ZonedDateTime兼容的json字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403120/

相关文章:

arrays - 在 Swift 4 中将 Json 对象转换为数组格式

php - 使用 JSON 将 Web 内容提取到 Apache Cordova/Phonegap 应用程序中

scala - 具有外部数据库和 RESTful Web gui 和服务的系统的正确设计是什么?

javascript - SharePoint REST API URL

java - Spring Data Rest 2.0.0.RELEASE 打破了以前使用 RC1 的代码

java - 尝试使用 Java 代理运行 WebGoat 时崩溃

java - 从 jackson 序列化的现有领域派生新领域?

javascript - 将\n 替换为 JSON 字符串中的 <br>

java - Spring RestTemplate 遵循带有 cookie 的重定向

java - Java Spring 在无效的 HttpSession 上返回错误