2

iOS6 の NSDateFormatter は、年が指定されていない場合、デフォルトで 2000 年になることに気付いた人はいますか?

iOS6:

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

=> 2000 年 1 月 1 日、午前 7 時 30 分

iOS5:

=> 1970 年 1 月 1 日、午前 7 時 30 分

質問: 1. 2 つの異なる時間を比較するより良い方法はありますか? この地下鉄アプリ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 に答える