2

iOS5 を搭載した iPhone 4 と iOS6 を搭載した iPhone5 のタイムゾーン設定はニューヨークです。「3 月 15 日午後 7 時 25 分 EDT」のような日付文字列を解析してから、「午後 7 時 25 分」のような時刻だけを再フォーマットして表示したいと考えています。 iOS5 では、常に EST に変更され、その後、日光が有効になると 1 時間が失われます。

次のコードは、この問題のデモです。

NSDateFormatter* formater= [[NSDateFormatter alloc] init];
[formater setDateFormat:@"MMM d, hh:mma z"];
NSDate * date = [NSDate date];
NSString * strDate = [formater stringFromDate:date];
NSLog(@"%@", strDate);
// Output  "Mar 15, 07:25PM EDT" on iPhone5(iOS6) and iPhone4 (iOS5)

date = [formater dateFromString:strDate];
strDate = [formater stringFromDate:date];
NSLog(@"%@", strDate);
// Output Mar 15, 07:25PM EST on iPhone5(iOS6)
// Output Mar 15, 06:25PM EST on iPhone4 (iOS5)

また、「EDT」でタイムゾーンを明示的に設定しようとしましたが、役に立ちません。

4

2 に答える 2

0

次のように日付から文字列への変換を実行する前に、NSDateFormatterのロケールを設定してみてください。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];
于 2013-03-16T04:27:07.473 に答える
0

これを試して

timeZoneWithAbbreviationEST または CDT を変更します。

NSDate* today = [NSDate date];

NSTimeZone* cSTTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"CDT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [cSTTimeZone secondsFromGMTForDate:today];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:today];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:today];
NSDateFormatter* formaters= [[NSDateFormatter alloc] init];
[formaters setDateFormat:@"MMM d, hh:mma z"];
NSString * strDates = [formaters stringFromDate:destinationDate];
NSLog(@"%@", strDates);
于 2013-03-16T00:21:45.337 に答える