如果我执行:
System.out.println("Formatter: " + String.format("%1$tH:%1$tM:%1$tS %1$tz %1$tZ", now));
System.out.println("SimpleDF : " + new SimpleDateFormat("HH:mm:ss Z z").format(now));
我希望结果是一样的。如果我检查自动调整夏令时,则值开始变化:
without dst (as expected, gmt=9:48): Formatter: 10:48:16 +0100 GMT+01:00 SimpleDF : 10:48:16 +0100 GMT+01:00 with dst (gmt varies between formatter and sdf ???): Formatter: 11:47:54 +0100 CEST SimpleDF : 11:47:54 +0200 CEST
在win xp上运行,在java 1.6-10 / 13和1.5.0-14上运行相同的结果,locale en_US。你觉得怎么样,一个错误?
答案 0 :(得分:1)
正确的方法是使用SimpleDateFormat
(或更确切地说是DateFormat
)对象。 String.format用于格式化作为在传递的对象上调用toString()
方法的结果而返回的字符串。第一行代码可以细分为,
String temp = now.toString();
System.out.println("Formatter: " + String.format("%1$tH:%1$tM:%1$tS %1$tz %1$tZ", temp));
临时字符串对象使用默认语言环境和设置进行格式化,因此可能无法保证完美结果(根据我的经验)。
SimpleDateFormat()
适用于Date
对象并访问属性并确保所有DST补丁。