web-dev-qa-db-ja.com

指定した日付のJavaで夏時間(DST)がアクティブかどうかを判断する

場所の緯度/経度を受け取り、夏時間のオン/オフ時にGMTオフセットを返すJavaクラスがあります。正しいオフセットを適用できるように、現在の日付が夏時間であるかどうかをJavaで簡単に判断する方法を探しています。現在、この計算は米国のタイムゾーンに対してのみ実行していますが、最終的にはこれをグローバルタイムゾーンにも拡張したいと考えています。

52
gelgamil

これは質問がされているマシンの答えです:

TimeZone.getDefault().inDaylightTime( new Date() );

クライアントでこれを把握しようとするサーバーには、クライアントのタイムゾーンが必要です。理由については、@ Powerlordの回答をご覧ください。

特定のTimeZoneについて

TimeZone.getTimeZone( "US/Alaska").inDaylightTime( new Date() );
67
Clint
TimeZone tz = TimeZone.getTimeZone("EST");
boolean inDs = tz.inDaylightTime(new Date());
10
mamboking

これらの座標を使用してもう少し作業を行う必要があり、それらがどのタイムゾーンにあるかを把握する必要があります。つまり、どのTimeZoneかがわかれば、isDayLight()メソッドが役立ちます。

たとえば、-0500がEST(米国/カナダ東部標準時)、CDT(米国/カナダ中部夏時間)、COT(コロンビア時間)、AST(ブラジルエーカー標準時)、ECT(エクアドル時間)など...

これらの一部は、夏時間をサポートする場合としない場合があります。

3
Powerlord

Joda Time には、オフセットを計算する処理メソッドが含まれています。 DateTimeZone.convertLocalToUTC(...) を参照してください

これを補足するには、緯度/経度情報で現在のタイムゾーンを検索する必要があります。 GeoNames は、Webサービス用のJavaクライアント、および単純なWeb要求フレームワーク(つまり http://ws.geonames.org /timezone?lat=47.01&lng=10.2

1
James Van Huis