9

Date.getTimezoneOffsetのドキュメントには次のように書かれています。

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

なぜ非推奨になったのですか?UTCからのオフセットを時間/分で取得するためのより短い方法(Apache Commons?)はありますか?Dateオブジェクトがあります...これをJodaDateに変換する必要がありますか?

そして、なぜUTCオフセットが必要なのかと尋ねる前に、それは単にログに記録するだけで、それ以上のものではありません。

4

3 に答える 3

11

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

  1. Date.getTimezoneOffsetが非推奨になったのはなぜですか?

これは、Dateのほぼすべてのメソッドが実際に非推奨になり、ロジックがカレンダーに移動されたためだと思います。setジェネリックとget、必要な特定のフィールドを示すパラメーターを使用することが期待されています。このアプローチにはいくつかの利点があります。メソッドの数が少なく、毎回異なるフィールドを通過するループでセッターを実行できることです。私は個人的にこの手法を頻繁に使用しました。これにより、コードが短くなり、保守が容易になります。

  1. ショートカット?しかし、電話の何が問題になっていますか

Calendar.get(Calendar.DST_OFFSET) と比較して Calendar.getTimeZoneOffset()

私が見る限り、違いは6文字です。

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

于 2012-05-07T17:35:42.490 に答える
3

日付操作ロジックはすべてDate、Javaの実装者が、カレンダーの種類ごとに異なる方法で実装する必要があることに気付いたときに削除されました(したがって、GregorianCalendarこの情報を今すぐ取得するには、を使用する必要があります)。ADateは、UTC時間値の単なるラッパーになりました。

于 2012-05-07T17:28:55.400 に答える
2

このページからコードを貼り付ける前に注意してください。おそらく私だけですが、tzオフセットを数分で取得するには、次のことを行う必要があると思います

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

Javadocの言うことではなく、次のようになります。

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



Calendar.ZONE_OFFSETUTCからの標準オフセット(ミリ秒単位)を提供します。これはDSTでは変更されません。たとえば、米国東海岸のタイムゾーンの場合、このフィールドはDSTに関係なく常に-6時間になります。

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

于 2013-03-08T09:30:33.313 に答える