java - 从 Angular 解析日期

标签 java angular datetime date-formatting

我想解析来自 Angular 的搜索日期。我提出这个查询:

[HPM] GET /api/data/find?from=2019-07-24T00:00:00.000Z&page=0&size=10 

使用https://github.com/tkaczmarzyk/specification-arg-resolver我想执行搜索框架。我尝试了这个配置:

@Spec(path = "createdAt", params = "from", spec = GreaterThanOrEqual.class, config="yyyy-MM-dd'T'HH:mm:ss'Z'"),
                    @Spec(path = "createdAt", params = "to", spec = LessThanOrEqual.class, config="yyyy-MM-dd'T'HH:mm:ss'Z'")

但我得到了异常(exception):

 java.time.format.DateTimeParseException: Text '2019-07-24T00:00:00.000Z' could not be parsed at index 19

你知道我需要设置什么日期格式吗?

最佳答案

TL;DR

uuuu-MM-dd'T'HH:mm:ss.SSSX

讨论

您尝试的格式模式字符串有两处错误,yyyy-MM-dd'T'HH:mm:ss'Z'

  1. 它不包括秒的小数部分。您尝试解析的字符串 2019-07-24T00:00:00.000Z 在秒上有三位小数,因此您需要在格式中指定三个 S模式字符串。您得到的异常指向索引 19,这正是小数点所在的位置。计算给出的索引的方式通常很有帮助。
  2. 日期时间字符串中的尾随 Z 表示 UTC 或距 UTC 的偏移量 0。您需要这样解析它,否则您将得到不正确的时间(除非您的 JVM 时区恰好与 UTC 一致,但这既晦涩又脆弱,您不会想依赖它)。

无论您使用 yyyy 还是 uuuu 来表示年份,都可能并不重要。我在下面提供了一个链接来讨论差异。

使用XXXXXXXXXXXXXXX<之间是有区别的,但它们都匹配 Z。因此,如果您的日期时间字符串始终带有 Z,那么您输入多少个 X 并不重要。有关详细信息,请参阅文档链接。

另一个提示:当使用某些格式模式字符串解析不起作用时,请尝试使用您正在尝试的模式格式化字符串,并查看格式化的字符串与您尝试的字符串有何不同解析。它常常会给你提示。例如:

    DateTimeFormatter testFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
    System.out.println(LocalDate.of(2019, Month.JULY, 24).atStartOfDay(ZoneId.systemDefault()).format(testFormatter));
    System.out.println("2019-07-24T00:00:00.000Z");

在输出中,字符串之间的差异非常明显:

2019-07-24T00:00:00Z
2019-07-24T00:00:00.000Z

(不过,这不会检测到引用的 'Z' 的错误使用。)

链接

关于java - 从 Angular 解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57172221/

相关文章:

java - 选项 Http 请求失败并出现 404 异常,而 Post 请求工作正常

java - 按标题选择选项卡

mysql - SELECT 语句获取最新行

javascript - 如何消除 AmChart 中图表和 X 轴值之间的差距?

angular - 每个 Angular 模块如何有一种样式?

php 日期函数返回一个我没想到的结果

c# - 如何在 C# 中将 DateTime 转换为 yyyy-mm-ddT00 :00:00. 000Z 格式?

Java 11 字符串连接性能对比 Java 8

java - "final remark"中CMS的具体工作是什么?

html - 省略号(三个点)展开和折叠文本