0

我有以下代码:

NSDate *今天 = [NSDate 日期];

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    NSLocale *zh_CN = [[NSLocale alloc]initWithLocaleIdentifier:@"zh_CN"];
    [格式化setLocale:zh_CN];
    [格式化程序 setDateStyle:NSDateFormatterFullStyle];
    [格式化程序设置时间样式: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 = [格式化字符串从日期:今天];
    NSLog(@"zh_CN todayString: %@", todayString);
    NSDate *backToDate = [格式化程序 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 回答