java - 从 Angular 解析日期
问题描述
我想从 Angular 解析搜索日期。我做这个查询:
[HPM] GET /api/data/find?from=2019-07-24T00:00:00.000Z&page=0&size=10
使用https://github.com/tkaczmarzyk/specification-arg-resolver框架我想执行搜索。我treid这个配置:
@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'")
但我得到例外:
java.time.format.DateTimeParseException: Text '2019-07-24T00:00:00.000Z' could not be parsed at index 19
你知道我需要设置什么日期格式吗?
解决方案
TL;博士
uuuu-MM-dd'T'HH:mm:ss.SSSX
讨论
您尝试的格式模式字符串有两个问题,yyyy-MM-dd'T'HH:mm:ss'Z'
.
- 它不包括秒的分数。您尝试解析的字符串 ,
2019-07-24T00:00:00.000Z
在秒上具有三位小数,因此您需要S
在格式模式字符串中指定三位。您得到指向索引 19 的异常,这正是小数点所在的位置。数数获得给定索引的方式通常很有帮助。 - 日期时间字符串中的尾随
Z
表示 UTC 或从 UTC 偏移 0。你需要这样解析它,否则你会得到一个不正确的时间(除非你的 JVM 的时区恰好与 UTC 重合,但这既模糊又脆弱,你不想依赖它)。
无论您使用yyyy
还是uuuu
使用一年都可能无关紧要。我在下面包含一个链接,用于讨论差异。
X
使用, XX
,和有区别XXX
,但它们都匹配。因此,如果您的日期时间字符串总是带有一个,那么您放多少并不重要。有关详细信息,请参阅文档链接。XXXX
XXXXX
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'
。)
链接
推荐阅读
- php - 在php中每两个月更改一次日历
- assembly - x86 或类似程序集中的内存分配
- javascript - 使用 Cookies 来存储个性化信息或设置偏好:当用户登录到新设备时它是否仍然存在
- r - How to make a stacked-bar plot of a confusion matrix
- bash - How i can use sed or another to replace specific string in Makefile
- r - Dplyr group_modify 和匿名函数
- node.js - How to connect a socket correctly to an app
- facebook - Facebook Graph retrieve post informations
- javascript - JS: Variable returning undefined except defining it earlier
- javascript - .Net (C#) 的 Javascript 身份验证框架