11

タイムゾーンが必要な API があります。たとえば。カリフォルニアにいる場合、夏時間がオンの場合は -7 を渡す必要があり (カリフォルニア、PDT は GMT - 7)、夏時間がオフの場合は -8 を渡す必要があります。しかし、現在の日付で夏時間がオンかオフかを知る方法がわかりません。

Date date1 = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
double[] coords = db.getCoords(id1);
double latitude = coords[0];
double longitude = coords[1];
double timezone = -7; /* For Pacific daylight time (GMT - 7)*/

ArrayList<String> Times = Class.foo(cal, latitude,
longitude, timezone);

JodaTime をインストールしましたが、それでも方法が見つかりません。ネイティブ Java または jodatime のいずれかにこれを行う方法があるかどうかを提案してください。

4

1 に答える 1

16

JodaTime でを作成する場合DateTime、オフセットを渡す必要はありません。代わりに、タイム ゾーンを渡します。DST を考慮して、正しいオフセットを決定します。

// First get a DateTimeZone using the zone name
DateTimeZone zone = DateTimeZone.forID("America/Los_Angeles");

// Then get the current time in that zone.
DateTime dt = new DateTime(zone);

// Or if you prefer to be more explicit, this syntax is equivalent.
DateTime dt = DateTime.now(zone);

アップデート

あなたが何を求めているのか正確にはまだわかりませんが、おそらく次のいずれかを探しています。

// To get the current Pacific Time offset
DateTimeZone zone = DateTimeZone.forID("America/Los_Angeles");
int currentOffsetMilliseconds = zone.getOffset(Instant.now());
int currentOffsetHours = currentOffsetMilliseconds / (60 * 60 * 1000);


// To just determine if it is currently DST in Pacific Time or not.
DateTimeZone zone = DateTimeZone.forID("America/Los_Angeles");
boolean isStandardOffset = zone.isStandardOffset(Instant.now());
boolean isDaylightOffset = !isStandardOffset;
于 2013-05-11T15:16:09.310 に答える