2

我的带有 iOS5 的 iPhone 4 和带有 iOS6 的 iPhone5 的时区设置为纽约,我想解析一个日期字符串,如“Mar 15, 07:25PM EDT”,然后重新格式化并显示时间,如“07:25PM”,在iOS5,它总是更改为 EST,然后在日光生效时错过一个小时。

下面的代码将演示这个问题。

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 回答