请参阅以下代码:
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个为什么: