小编Edu*_*chi的帖子

SimpleDateFormat行为不一致

请参阅以下代码:

String timeString = "1980-01-01T14:00:00+0300";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date2 = sdf.parse(timeString);

// sdf.getCalendar().get(Calendar.ZONE_OFFSET);
System.out.println(sdf.format(date2));
Run Code Online (Sandbox Code Playgroud)

现在,我正处于一个+2h偏移,+1夏令时(目前)的国家.如果我按原样运行此代码,它将打印出来

1980-01-01T13:00:00+0200
Run Code Online (Sandbox Code Playgroud)

如果我取消注释询问日历偏移量的行,则程序的输出为

1980-01-01T14:00:00+0300
Run Code Online (Sandbox Code Playgroud)

知道为什么会发生这种情况,我怎样才能获得一致的输出?

为了避免任何不清楚的事情:因为我正在处理一些遗留代码,所以java 8不是一个选项.是的,这里的关键点是为什么,而不是解决方法是什么?有2个为什么:

  1. 为什么我通过+0300 TZ,默认情况下我会收到+0200?(除非另有说明,否则SimpleDateFormat应始终使用TimeZone.getDefault).
  2. 为什么它只是因为我在它的日历实例上调用getter来给出不同的答案.

java simpledateformat

7
推荐指数
1
解决办法
129
查看次数

标签 统计

java ×1

simpledateformat ×1