2013-02-14 61 views
0

後,我有以下代碼:dateFromString返回一個錯誤的日期setLocale的

 
NSDate *today = [NSDate date]; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; 
    NSLocale *zh_CN = [[NSLocale alloc]initWithLocaleIdentifier:@"zh_CN"]; 
    [formatter setLocale:zh_CN]; 
    [formatter setDateStyle:NSDateFormatterFullStyle]; 
    [formatter 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(@"today: %@", today); 

    NSString *todayString = [formatter 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] today: 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: Friday, February 15, 2013 
2013-02-15 00:18:12.620 TestNSDate[16637:11303] en_US newBackToDate: 2013-02-14 16:00:00 +0000 

在這裏我們可以看到backToDate成爲1999-12-30,爲什麼會發生這種情況?

+0

想必格式化程序不能識別提供的日期字符串。 – 2013-02-14 16:49:45

+0

這很奇怪。它適用於'en_US'語言環境和'newFormatter',但它無法正確使用'zh_CN'語言環境和'formatter'。人們會期望給定的日期格式化程序正確解析剛剛生成的字符串。這是在哪裏運行的?設備還是模擬器?什麼版本的iOS?嘗試一些其他版本。 – rmaddy 2013-02-14 16:57:29

+0

人們猜測zh_CN區域設置格式化程序存在「限制」。 – 2013-02-14 20:07:36

回答

0

dateFromString:不能保證或者甚至不應該解析來自stringFromDate:的日期字符串。典型的使用場景是明確設置NSDateFormatter的格式,並期望日期字符串採用這種格式。

對於從網絡協議中的頭文件解析互聯網日期,最好將格式化程序的語言環境設置爲en_US_POSIX,因爲默認情況下將使用用戶當前的語言環境。