首页 > 解决方案 > 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 小时。可能和时区有关,我没有在另一台电脑上测试过。我有两个问题:

谢谢

标签: javaxmlgregoriancalendar

解决方案


基本上,它增加了 2 小时

并不真地。它为您提供同一时刻的输出,但在您的系统本地时区 - 因为您正在创建一个SimpleDateFormat没有指定时区(或文化)的:

DateFormat f = new SimpleDateFormat(pattern);

我个人建议避免java.text.SimpleDateFormat完全使用,更喜欢java.time类型和格式化程序。但是,如果您肯定要使用SimpleDateFormat,只需确保将时区设置为 UTC(假设您始终需要 UTC)并最好也设置文化(例如,设置为Locale.ROOT)。


推荐阅读