iOS6 NSDateFormatter默认年份

时间:2012-09-16 18:34:25

标签: nsdateformatter ios6 ios5

有没有人注意到iOS6 NSDateFormatter默认为2000年,当时没有给出年份

iOS6的:

[[NSDateFormatter alloc] init] dateFromString:@“7:30 am”]

=> 2000年1月1日,上午7:30

iOS5的:

=> 1970年1月1日,上午7:30

问题: 1.有更好的方法来比较两个不同的时间吗?我有这个地铁应用PATH Schedule/Map。地铁时间在数据库中硬编码为numSecondsSince1970。我通过比较出发时间和当前的numSecondsSince1970,给人们下一班火车到达。 现在我只是将1970年的时间字符串添加到“2:30 am”=>的时间字符串中。 “1970年凌晨2:30”但似乎有更好的方式

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,我刚刚注意到这个问题。显然,Apple会报告此错误,请参阅http://openradar.appspot.com/12358210


编辑:这就是我正在处理的项目中处理此问题的方法......

// I use the following code in a category to parsing date strings

- (NSDate *)dateWithPath:(NSString *)path format:(NSString *)format
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
    formatter.dateFormat = format;

    NSString *string = [self valueWithPath:path];
    return [formatter dateFromString:string];
}

// old parsing code that worked fine in iOS 5, but has issues in iOS 6

NSDate *date            = [element dateWithPath:@"datum_US" format:@"yyyy-MM-dd"];
NSDate *timeStart       = [element dateWithPath:@"aanvang" format:@"HH:mm:ss"];
NSTimeInterval interval = [timeStart timeIntervalSince1970];
match.timeStart         = [date dateByAddingTimeInterval:interval];

和修复...

// the following code works fine in both iOS 5 and iOS 6

NSDate *date                = [element dateWithPath:@"datum_US" format:@"yyyy-MM-dd"];
NSDate *timeStart           = [element dateWithPath:@"aanvang" format:@"HH:mm:ss"];
NSCalendar *calendar        = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
calendar.timeZone           = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSUInteger units            = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *timeComps = [calendar components:units fromDate:timeStart];
match.timeStart             = [calendar dateByAddingComponents:timeComps toDate:date options:0];