我的iPhone 4与iOS5和iPhone5与iOS6的时区设置为纽约,我想 解析日期字符串,如“3月15日,美国东部时间下午7点25分”,然后重新格式化并显示时间 像“07:25 PM”,在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'明确设置时区,但没有帮助。
答案 0 :(得分:0)
试试这个
更改timeZoneWithAbbreviation
EST或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);
答案 1 :(得分:0)
在执行日期到字符串转换之前尝试设置NSDateFormatter的语言环境,如下所示:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = [NSLocale currentLocale];