0

年末以降、NSStringをNSDateに変換する際に問題が発生しました。コードは以前は常にうまく機能していましたが、突然奇妙に動作し始めました...

たとえば、2013-01-05は、NSDateに変換すると2014-01-05になります。

通年なので、タイムゾーンが不気味な感じはしません。

2012年以降の日付ではこれを行っていません。

誰かが何が間違っているのか考えていますか?

コード:NSString * dateString = postInfo.no​​teDate; NSString * newDateString = [dateString substringToIndex:10];

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"YYYY-MM-dd"]; 
    NSDate *date = [[NSDate alloc] init];
    date = [dateFormat dateFromString:newDateString];

newDateStringは2013-01-05を返します

日付は2014-01-05を返します

4

4 に答える 4

5

ドキュメントから:

Y 1..n 1997年(「WeekofYear」ベースのカレンダー)。通常、長さはパディングを指定しますが、2文字の場合は最大長も指定します。この年の指定は、ISO 8601で定義されているISO年-週カレンダーで使用されますが、週の日付処理が必要な非グレゴリオ暦システムで使用できます。必ずしも暦年と同じ値であるとは限りません。

y1..n1996年。通常、長さはパディングを指定しますが、2文字の場合は最大長も指定します。

だからあなたは'yyyy'が欲しい

この「バグ」は、iOS/Cocoa開発者にとって必見の素晴らしいWWDC2011ビデオ「セッション117-カレンダー計算の実行」でも説明されています。

ISO8601に関するウィキペディアの記事


NSDate *date = [[NSDate alloc] init];
date = [dateFormat dateFromString:newDateString];

NSDateを作成し、別のNSDateを作成して、最初の日付を上書きします。ただやる

NSDate *date = [dateFormat dateFromString:newDateString];
于 2013-01-06T17:24:09.330 に答える
3

週の年を与えるYYYYではなく、年にyyyyを使用します。ISO規格を参照してください。

于 2013-01-06T17:19:48.890 に答える
3

小さな文字でyyyyを使用します。YYYYは別のものです。

年(「WeekofYear」ベースのカレンダー)。この年の指定は、ISO 8601で定義されているISO年-週カレンダーで使用されますが、週の日付処理が必要な非グレゴリオ暦システムで使用できます。必ずしも暦年と同じ値であるとは限りません。

http://www.unicode.org/reports/tr35/tr35-19.html#Date_Format_Patternsを参照してください

于 2013-01-06T17:20:46.847 に答える
0

これがお役に立てば幸いです。これを試して

 - (NSDate*) dateFromString:(NSString*)aStr
    {

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];

        [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss a"];
        [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

        NSLog(@"%@", aStr);
        NSDate   *aDate = [dateFormatter dateFromString:aStr];
        [dateFormatter release];
        return aDate;
    }
于 2013-01-06T17:36:01.920 に答える