java - Java XMLGregorianCalendar 正在改变时间 - 奇怪的行为
问题描述
我有一个日期作为输入 = 2021-03-12T10:42:01.000Z.... 我想转换成这种格式:
String pattern = "yyyy-MM-dd'T'HH:mm:ssZ";
public String getDate(XMLGregorianCalendar input) {
DateFormat f = new SimpleDateFormat(pattern);
input.toGregorianCalendar().setTimeZone(TimeZone.getTimeZone(ZoneOffset.UTC));
String output = f.format(input.toGregorianCalendar().getTime());
System.out.println(output);
}
2021-03-12T12:42:01+0200
基本上,它增加了 2 小时。可能和时区有关,我没有在另一台电脑上测试过。我有两个问题:
- 为什么会这样
- 我能做些什么来避免它?这是一个遗留应用程序,所以我不想做大的改变
谢谢
解决方案
基本上,它增加了 2 小时
并不真地。它为您提供同一时刻的输出,但在您的系统本地时区 - 因为您正在创建一个SimpleDateFormat
没有指定时区(或文化)的:
DateFormat f = new SimpleDateFormat(pattern);
我个人建议避免java.text.SimpleDateFormat
完全使用,更喜欢java.time
类型和格式化程序。但是,如果您肯定要使用SimpleDateFormat
,只需确保将时区设置为 UTC(假设您始终需要 UTC)并最好也设置文化(例如,设置为Locale.ROOT
)。
推荐阅读
- python - Python/Pyspark:从地址栏中删除邮政编码
- python - 从远程服务器问题的 VSCode 绘图:qt.qpa.xcb:无法连接到显示器
- mariadb-10.4 - 没有索引提示的 MariaDB MAX_JOIN_SIZE 错误
- arrays - 在 Lua 中复制表值正在更改原始值
- android - Android编程中如何执行一个延迟几秒的函数
- codenameone - 使用代号一制作的桌面应用程序中的菜单
- html - 如何在 CSS 中垂直堆叠的按钮之间放置空格?
- http - 向烧瓶添加自定义 HTTP 错误和异常
- java - Selenium 使用 Java 无法点击 login.yahoo.com 页面中的广告图片
- angular - 错误:
: 期待间谍,但未定义