SimpleDateFormat扩展
DateFormat并因此在内部使用
Calendar。解析日历更新的日期时,可以 在 解析 后
从中获取时区:
~~~~
//use the timezone of the internally stored calendaroutputSdf.setTimeZone( inputSdf.getTimezone() );
这也说明了为什么
DateFormat不是线程安全的。
编辑:
似乎内部日历的时区 未更新, 但ZONE_OFFSET字段已 更新 。因此,您可以执行以下操作:
int zoneOffset = inputSdf.getCalendar().get( Calendar.ZONE_OFFSET );//length check etc. left for youString matchingZoneId = TimeZone.getAvailableIDs( zoneOffset )[0];outputSdf.setTimeZone( TimeZone.getTimeZone( matchingZoneId ) );
请注意,您不能只设置输出格式的时区偏移量,因为这不会更新格式化时使用的时区参考。
如您所见,以这种方式进行操作看起来有些“棘手”,因此您应该认真考虑是否 确实
需要时区。在大多数情况下,无论如何,您都将以不同的方式定义输出时区,例如通过获取用户的位置,输入等。



