java-在不同时区的Freemarker打印日期
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-在不同时区的Freemarker打印日期,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1541字,纯文字阅读大概需要3分钟。
内容图文
![java-在不同时区的Freemarker打印日期](/upload/InfoBanner/zyjiaocheng/668/d5467f5a071f4e0f90e79fd474808f3f.jpg)
我正在使用Freemarker版本2.3.20.
我有一个数据结构,其中包含两个日期-一个在本地时间,另一个在utc时间.
// 2017-07-17 18:30 UTC
ZonedDateTime utcTime = ZonedDateTime.of(2017, 7, 17, 18, 30, 0, 0, ZoneId.of("UTC"));
// 2017-07-17 20:30 (+02:00)
ZonedDateTime localTime = utcTime.withZoneSameInstant(ZoneId.of("Europe/Berlin"));
Freemarker只能处理java.util.Date,因此我要交出日期.
Map<String, Object> mapping = new HashMap<String, Object>();
mapping.put("departureTimeLocal", Date.from(localTime.toInstant()));
mapping.put("departureTimeUtc", Date.from(utcTime.toInstant()));
在我的模板中,我期望编写如下内容:
Departure (local): ${departureTimeLocal?string['HH:mm']}
Departure (UTC) : ${departureTimeUtc?string['HH:mm']}
结果,我希望看到:
Departure (local): 20:30
Departure (UTC) : 18:30
我目前看到的是:
Departure (local): 20:30
Departure (UTC) : 20:30 <#-- timestamp interpreted in local time -->
我也尝试过类似的方法:
Departure (converted): ${(departureTimeLocal?string['yyyy-MM-dd HH:mm'] + ' UTC')?datetime['yyyy-MM-dd HH:mm z']?string['HH:mm']}
--> Departure (converted): 22:30
归档类似内容的最佳方法是什么?
是的,我知道:java.util.Date实际上没有时区(仅用于打印),而localTime / utcTime.toInstant()都映射到zulu时间中的相同时刻.
解决方法:
使用freemarker 2.3.20,您可以使用内置的iso日期:
${departureTimeUtc?time?iso_utc_m_nz}
自freemarker 2.3.21起不推荐使用此内置功能,并由以下内容代替:
${departureTimeUtc?time?string.iso_m_nz_u}
iso_m_nz_u的含义是:
> ISO:使用ISO 8601:2004格式
> m:精确到分钟
> nz:无时区
> u:使用UTC代替默认时区
选项的完整列表可以找到here.
内容总结
以上是互联网集市为您收集整理的java-在不同时区的Freemarker打印日期全部内容,希望文章能够帮你解决java-在不同时区的Freemarker打印日期所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。