2012-05-07 8 views
9

Date.getTimezoneOffsetのドキュメントは言う:Date.getTimezoneOffsetはなぜ廃止されましたか?

推奨されていません。 JDKバージョン1.1以降は、 - (Calendar.get(Calendar.ZONE_OFFSET)+ Calendar.get(Calendar.DST_OFFSET))/(60 * 1000)に置き換えられました。

なぜ廃止されましたか?時間(分)でUTCからのオフセットを得るために、より短い方法(Apache Commons?)がありますか? Dateオブジェクトを持っています...これをJodaDateに変換する必要がありますか?

なぜ、私はUTCオフセットが必要なのかを尋ねる前に、それだけでログに記録するだけです。

+2

Java IMHOの日付と時刻の処理に関連するものは、JodaTimeに切り替える必要があります。 – pcalcao

+4

すべてのタイムゾーンオフセットが整数ではないためです。言い換えれば、すべてのタイムゾーンが隣接するタイムゾーンより1時間早くまたは遅くなるわけではありません。 http://www.timeanddate.com/worldclock/ –

+2

@GilbertLeBlancをチェックしてください - それは時間ではなく分を返します。 – ripper234

答えて

10

ここに2つの質問があります。

  1. なぜDate.getTimezoneOffsetは推奨されていませんでしたか?

実際には、ほとんどすべてのDateメソッドを廃止し、ロジックをカレンダーに移動したためだと思います。 setgetという一般的なパラメータを使用して、必要なフィールドを指定する必要があります。このアプローチにはいくつかの利点があります。メソッドの数が少なくて済み、毎回異なるフィールドを渡すループ内でセッターを実行する能力があります。私は個人的にこのテクニックを多く使用しました。コードを短くして保守しやすくしています。

  1. ショートカット?しかし、私の知る限り差は6つの文字で見ることができるよう Calendar.getTimeZoneOffset()

    に比べコール

Calendar.get(Calendar.DST_OFFSET)の何が問題なのです。

Jodaは非常に強力なライブラリであり、実際には洗練された日付操作コードの多くを書き込む必要がある場合は、それに切り替えます。私は個人的に標準java.util.Calendarを使用しており、外部ライブラリを使用する理由は見当たりません。いい古いカレンダーで十分です。

+1

+1を推奨します。 –

+0

'これは実際には' Dateのすべてのメソッド 'を廃止したことで受け付けます。誰もが私がjodaに切り替えることをお勧めします - 冷たい、私は使用しているAPIの日付オブジェクトです、私は本当に今APIを変更することはできません。 – ripper234

3

さまざまなタイプのカレンダーで異なる実装が必要な場合があるため、日付操作ロジックはすべてDateから移動されました(この情報を今すぐ取得するためにGregorianCalendarを使用する必要があります)。 Dateは、UTC時間値を囲む単なるラッパーになりました。

2

このページのコードを貼り付ける前に注意してください。

int tzOffsetMin = -(cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET))/(1000*60); 



Calendar.ZONE_OFFSET: はおそらく私だけが、私はあなたが

int tzOffsetMin = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET))/(1000*60); 

を行う必要が分単位でオフセットTZ得るのではなくするために、javadocがある、言うことを信じていますUTCからの標準的なオフセット(msec)を与えます。これはDSTでは変更されません。たとえば、米国東海岸時間帯の場合、このフィールドはDSTに関係なく常に-6時間になります。

Calendar.DST_OFFSETには、現在のDSTオフセット(ミリ秒単位)が表示されます。たとえば、夏時間にDSTを使用する国では、このフィールドの値は+1時間(1000 * 60 * 60ミリ秒)になる可能性があります。

関連する問題