iOS 6 dateFromString返回错误的日期

时间:2012-09-24 11:34:41

标签: ios6

我最近升级到iOS 6并注意到dateFromString无法正常工作,除非我对dateFormat做错了。它在升级之前正在工作。

代码:

NSString *string = @"2012-09-24 - Sun";
NSLog(@"string = %@", string);
NSDateFormatter *df = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en-US"];
[df setLocale:locale];
[df setDateFormat:@"yyyy-MM-dd - EEE"];
NSDate *date = [df dateFromString:string];
NSLog(@"date = %@", date);

输出:

string = 2012-09-24 - Sun
date = 1999-12-26 05:00:00 +0000

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

看起来格式化程序在iOS 6中更改了规范:

  • OS X v10.8和iOS 6.0中的格式化程序使用版本tr35-25
  • iOS 5.0-5.1中的格式化程序使用版本tr35-19

答案 1 :(得分:3)

请检查:

NSString *string = @"2012-09-24 - Sun";
NSLog(@"string = %@", string);
NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateFormat:@"yyyy-MM-dd - EEE"];
NSDate * date = [df dateFromString: string];
NSDate * sourceDate = date;
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;   
date = [[NSDate alloc] initWithTimeInterval:interval sinceDate:date];
NSLog(@"date = %@", date);