【发布时间】:2021-08-20 07:30:42
【问题描述】:
我有一个日期作为输入 = 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 小时。可能和时区有关,我没有在另一台电脑上测试过。我有两个问题:
- 为什么会这样
- 我可以做些什么来避免它?这是一个旧版应用,所以我不想做大的改变
谢谢
【问题讨论】:
-
也不是
input.toGregorianCalendar()很可能(取决于实现)每次调用都会为您提供一个新实例。因此,您设置时区的声明可能不会改变任何内容。但是,它不是输出中不同小时的来源。 -
您想要哪个结果?
2021-03-12T10:42:01+0000?您的字符串采用 UTC 格式,由结尾的Z表示。是否总是这样,或者您可以使用其他偏移量,例如-03、-0100或+02:00? -
你的输入和输出都在ISO 8601 format,那么你的转换真的有必要吗?如果你的字符串的接收者接受 ISO 8601,我建议你给他们
input.toString()。