私はESTタイムゾーンに時間を持っています、それはmysqlサーバーのNOW()関数を使用して行われます。私のサーバーはESTにあるため、保存される時間はESTにあります。 iPhoneのアプリから取得するときは、ユーザーの正しいタイムゾーンで表示する必要があります。それ、どうやったら出来るの?
ESTの意味によって異なると思います。米国東海岸を意味する場合、一般的にはUTCから5時間遅れており(夏時間は考慮されていません)、04:00ESTになります。略語はあいまいであるため、可能な限り使用しないようにしてください。 ESTは、America/DetroitとAustralia/Sydneyの両方の略語です。 NSTimeZone initWithNameを使用すると、より正確な結果が得られます。
Chronos Time Zone Repository は、タイムゾーンがどのように機能するかを理解するのに非常に役立つ、読みやすいXMLタイムゾーンデータベースを提供します(すべてかなり面倒で変更可能です)。
//以下の関数を使用して、日付を希望のタイムゾーンに変換できます
+ (NSDate *) convertDate:(NSDate *) date toTimeZone:(NSString *) timeZoneAbbreviation {
NSTimeZone *systemZone = [NSTimeZone systemTimeZone];
NSTimeZone *zoneUTC = [NSTimeZone timeZoneWithAbbreviation:timeZoneAbbreviation];
NSTimeInterval s = [zoneUTC secondsFromGMT];
NSTimeZone *myZone = [NSTimeZone timeZoneWithAbbreviation:[systemZone abbreviationForDate:date]];
NSTimeInterval p = [myZone secondsFromGMT];
NSTimeInterval i = s-p;
NSDate *d = [NSDate dateWithTimeInterval:i sinceDate:date];
return d;
}
//Test case **note** cgUtil is the class this method is written thus change it accordingly
__block NSDate *now = [NSDate date];
NSLog(@"Current time:%@", now);
[[[NSTimeZone abbreviationDictionary] allKeys] enumerateObjectsUsingBlock:^(NSString * abb, NSUInteger idx, BOOL *stop) {
NSLog(@"Time zone abb:%@:Time:%@",abb,[cgUtil convertDate:now toTimeZone:abb]);
}];