2

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

iOS6:

[[NSDateFormatter alloc] init] dateFromString: @"7:30am"]

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

iOS5:

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

问题:1.有没有更好的方法来比较两个不同的时间?我有这个地铁应用程序PATH Schedule/Map。地铁时间在数据库中被硬编码为 numSecondsSince1970。我通过将出发时间与当前的 numSecondsSince1970 进行比较,为人们提供下一班到达的火车。现在我只是将 1970 年附加到时间字符串 "2:30am" => "1970 2:30am" 但似乎有更好的方法

谢谢!

4

1 回答 1

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];
于 2012-10-06T13:48:08.740 回答