Edu*_*chi 7 java 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个为什么:
问题是,这Calendar#get不是一个简单的 getter,它看起来像这样:
public int get(int field)
{
complete();
return internalGet(field);
}
Run Code Online (Sandbox Code Playgroud)
complete根据 Javadoc,这是在哪里:
填写日历字段中任何未设置的字段。首先,
computeTime()如果尚未根据日历字段值计算时间值(距纪元的毫秒偏移量),则调用该方法。然后,computeFields()调用该方法来计算所有日历字段值。
我在这里查找了源代码,但最新 Java 版本的代码也是相同的。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |