2009-03-31 6 views
4

私が実行した場合:String.format%tzを使用して(正しく)タイムゾーンを報告する方法は?

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 

は、Java 1.6から10/13および1.5.0-14、ロケールはen_USで同じ結果で、勝利XP上で実行されています。あなたはどう思いますか、バグですか?

おそらく関連:http://bugs.sun.com/view_bug.do?bug_id=6286592

+0

私はそれが本当にあなたが言及したバグだと思う。 – ordnungswidrig

答えて

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パッチを確実にします。