0

私は次のコードを持っています:

NSDate * today = [NSDate date];

    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    NSLocale * zh_CN = [[NSLocale alloc] initWithLocaleIdentifier:@ "zh_CN"];
    [フォーマッターsetLocale:zh_CN];
    [フォーマッターsetDateStyle:NSDateFormatterFullStyle];
    [フォーマッターsetTimeStyle:NSDateFormatterNoStyle];

    NSDateFormatter * newFormatter = [[NSDateFormatter alloc] init];
    NSLocale * en_US = [[NSLocale alloc] initWithLocaleIdentifier:@ "en_US"];
    [newFormatter setLocale:en_US];
    [newFormatter setDateStyle:NSDateFormatterFullStyle];
    [newFormatter setTimeStyle:NSDateFormatterNoStyle];

    NSLog(@ "今日:%@"、今日);

    NSString * todayString = [フォーマッターstringFromDate:today];
    NSLog(@ "zh_CN todayString:%@"、todayString);
    NSDate * backToDate = [formatter dateFromString:todayString];
    NSLog(@ "zh_CN backToDate:%@"、backToDate);

    NSString * newTodayString = [newFormatter stringFromDate:today];
    NSLog(@ "en_US newTodayString:%@"、newTodayString);
    NSDate * newBackToDate = [newFormatter dateFromString:newTodayString];
    NSLog(@ "en_US newBackToDate:%@"、newBackToDate);

backToDate = newBackToDate =今日を期待していましたが、ログには次のように表示されます。

2013-02-15 00:18:12.594 TestNSDate [16637:11303]今日:2013-02-14 16:18:12 +0000
2013-02-15 00:18:12.595 TestNSDate [16637:11303] zh_CN todayString:2013年2月15日星期五
2013-02-15 00:18:12.596 TestNSDate [16637:11303] zh_CN backToDate:1999-12-30 16:00:00 +0000
2013-02-15 00:18:12.619 TestNSDate [16637:11303] en_US newTodayString:2013年2月15日金曜日
2013-02-15 00:18:12.620 TestNSDate [16637:11303] en_US newBackToDate:2013-02-14 16:00:00 +0000

ここで、backToDateが1999-12-30になったことがわかりますが、なぜこれが発生するのでしょうか。

4

1 に答える 1

0

dateFromString:から来た日付文字列を解析することは保証されていないか、おそらく想定されていませんstringFromDate:。典型的な使用シナリオは、NSDateFormatter の形式を明示的に設定し、日付文字列がこの形式になることを期待することです。

ネットワーク プロトコルのヘッダーからの日付などのインターネット日付を解析するにはen_US_POSIX、デフォルトでユーザーの現在のロケールが使用されるため、フォーマッタのロケールも に設定することをお勧めします。

于 2013-02-14T17:11:02.060 に答える