【问题标题】:iOS6 NSDateFormatter default yeariOS6 NSDateFormatter 默认年份
【发布时间】:2012-09-16 18:34:25
【问题描述】:

有没有人注意到 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" 但似乎有更好的方法

谢谢!

【问题讨论】:

    标签: nsdateformatter ios6 ios5


    【解决方案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];
    

    【讨论】:

    • 谢谢沃尔夫冈。我刚看到这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 2021-04-20
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多