3

私には2つの変数があります:

NSTimeZone *timeZoneMinus5 = [NSTimeZone timeZoneForSecondsFromGMT: -18000];
NSTimeZone *timeZoneEST = [NSTimeZone timeZoneWithName:@"EST"];

デバイスとシミュレータでテストされ、両方とも戻りGMT-05:00ます。

私がこれを書いているので、時間は2:55 am (GMT)です。私は東部標準時のタイムゾーンにいるので、10:55pm (GMT-05:00)2011年4月15日の夏時間を観察しています。

ただし、[timeZoneEST isDaylightSavingTime]戻り値NO[timeZoneEST daylightSavingTimeOffset]戻り値0

timeZoneEST現在の時刻を文字列として取得するために使用する場合:

NSDate *gmtTime = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"h:mm a (z)"];
[dateFormatter setTimeZone: timeZoneEST];
NSString *timeStr = [dateFormatter stringFromDate: gmtTime];

シミュレーターとデバイスの両方が私に与えます9:55 PM (GMT-05:00)

私の理解では、私は取得する必要があります10:55 PM (GMT-05:00)。私は間違っていますか、それとも間違っていますか?

4

2 に答える 2

1

あなたはとても混乱しています。まず、米国東部時間帯の夏時間は-5ではなく-4です。午後9時55分は確かに午前2時55分前の5時間です。午後10時55分は4時間前になります。

「EST」がまさにそれを提供している可能性があります。夏時間に関係なく、東部標準時。「EST5EDT」は、期待するタイムゾーンを提供する場合がありますが、(デバイスがシミュレーターのようにzoneinfoを使用すると仮定して)「America/New_York」が推奨されます。

于 2011-04-16T03:51:00.773 に答える
1

ESTとして定義しているので、を返すのNSTimeZoneは理にかなっています。代わりに、現地時間の夏時間オフセットを取得するために使用します。秒を返す必要があります。[timeZoneEST isDaylightSavingTime]NO[[NSTimeZone localTimeZone] daylightSavingTimeOffset];3600

于 2014-05-06T04:56:32.737 に答える