【发布时间】:2015-07-03 11:33:02
【问题描述】:
请看以下代码:
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));
现在,我所在的国家/地区拥有+2h 偏移量、+1 夏令时(目前)。
如果我按原样运行此代码,它将打印
1980-01-01T13:00:00+0200
如果我取消注释询问日历偏移量的行,程序的输出是
1980-01-01T14:00:00+0300
知道为什么会发生这种情况,我怎样才能获得一致的输出?
为了避免更不清楚的事情: 由于我正在处理一些遗留代码,因此 java 8 不是一个选项。是的,这里的关键是为什么,而不是解决方法是什么? 并且有 2 个 WHY:
- 为什么我传递一个 +0300 TZ 而默认情况下我收到一个 +0200 ? (SimpleDateFormat 应始终使用 TimeZone.getDefault,除非 另有规定)。
- 为什么仅仅因为我在它的日历实例上调用了一个 getter,它就会给出不同的答案。
【问题讨论】:
-
其中有什么不一致的地方?当您不使用偏移量时,它会按原样为您提供日期,而当您使用它时,它会根据时区而变化。
-
@RamanShrivastava 调用 getter 一次不应更改格式函数的输出。
标签: java simpledateformat