angularjs - 在 angularJs 视图中格式化 Java 8 LocalDateTime
问题描述
我正在使用带有 angularJs UI 的 spring boot,我的应用程序传递java.time.LocalDateTime
到 anular 视图。
我正在尝试使用angularjs'
s 日期过滤器,如下所示:
{{ localDateTime | date : 'yyyy/MM/dd hh:mm:ss' }}
但它不起作用。输出如下所示:
{"dayOfMonth":8,"dayOfWeek":"FRIDAY","dayOfYear":39,"month":"FEBRUARY","year":2019,"monthValue":2,"hour":14,"minute":48,"nano":87000000,"second":24,"chronology":{"id":"ISO","calendarType":"iso8601"}}
我什至也尝试按照这里application.property
的建议添加。它仍然显示在 JSON 之上。有人可以帮忙吗。
解决方案
问题是默认情况下 Jackson 不知道如何将 Java 8 日期结构 ( JSR 310 ) 正确序列化为 JSON。结果,它返回一个包含dayOfMonth
, dayOfWeek
, ... 的整个对象结构,正如您所观察到的。
一种解决方案是将您的日期序列化为众所周知的格式,例如 ISO-8601 字符串。为此,您首先必须通过添加以下依赖项来添加对这些 Java 8 类型的支持:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
之后,您应该注意到您的日期被序列化为一个数组,例如:
[2019, 2, 8, 11, 0, 0, 0, 0]
这是一个包含年、月日等的数组。但是,AngularJS 日期过滤器还不能使用这些结果。正确的解决方案是将它们格式化为没有时区的 ISO-8601 字符串(考虑到它是 a LocalDateTime
)。您可以通过在application.propertiesWRITE_DATES_AS_TIMESTAMPS
中配置以下属性来禁用 Jackson 中的序列化功能:
spring.jackson.serialization.write-dates-as-timestamps=false
现在您的日期将被格式化为字符串,例如:
"2019-02-08T11:00:00.000"
如果您查看AngularJS 日期过滤器的文档,您会发现它得到了适当的支持:
将日期格式化为 Date 对象、毫秒(字符串或数字)或各种 ISO 8601 日期时间字符串格式(例如 yyyy-MM-ddTHH:mm:ss.sssZ 及其较短的版本,如 yyyy-MM-ddTHH:mmZ、yyyy-MM -dd 或 yyyyMMddTHHmmssZ)。
请注意,由于您使用的是LocalDateTime
,因此没有给出时区信息,因此,AngularJS 日期过滤器认为这是本地浏览器时间,如同一文档中所述:
如果在字符串输入中未指定时区,则时间被认为是本地时区。
这意味着如果服务器时区与浏览器时区不同,给定时间就会出现问题。
推荐阅读
- python - val_loss 没有从 inf + loss 得到改善:nan 训练时出错
- julia - 如何在 JuliaDB 中编辑一行?
- python - 匹配 HTML 文本末尾的空段落
- python - ImportError:尝试运行 Pythontex 时没有名为 pygments.styles 的模块
- r - 使用 R 中给定的一组关键字计算单词的数量
- c++ - Visual Studio 2019 中的 C++ 单元测试
- pandas - Sklearn datasets 默认数据结构是pandas还是numPy?
- c - GCC ASM 从 C 将 AH 寄存器设置为 1h
- asp.net - 如何在 .Net Core MVC 中发布
- node.js - 等待异步调用完成,以便我可以使用结果,它不起作用?