2014-01-19 74 views
0

NSDateFormatter轉換成錯誤的日期不知道爲什麼錯誤轉換

我使用下面的代碼轉換以下字符串19-01-2014下午1時06分54秒爲日期

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"DD-MM-YYYY hh:mm:ss a"]; 
NSDate *date = [dateFormat dateFromString:startTime]; 

而且我得到下面的輸出被incorrect.Please建議一些事情日期

印刷描述: 2014年1月4日7點36分54秒+0000

回答

0

打印NSDate將返回默認描述 - 因爲NSDates不考慮語言環境,時區等,它默認爲UTC +/- 0000(注意+0000)。

+0

但仍有4日至19日之間差距很大? – user2814822

+0

這是因爲你的日期格式字符串不正確(請參閱martin的答案) – John

+0

順便說一句,關於我的答案 - 我喜歡用於調試的一個很好的小助手方法是' - [NSDate descriptionWithLocale:]' – John

1

格式字符串中的「DD-MM-YYYY」部分不正確,應該是「dd-MM-yyyy」。 (見http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns爲所有的日期格式 完整列表。)

你也應該設定一個「POSIX語言環境」是獨立於用戶的區域/地區的 設置:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"dd-MM-yyyy hh:mm:ss a"]; 
[dateFormat setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 
NSDate *date = [dateFormat dateFromString:startTime]; 
+0

你也可以設置時區和日曆*代替語言環境,如果這樣做更有意義。 – trojanfoe

+0

@trojanfoe:這是兩回事。如果輸入具有固定的*格式,那麼設置POSIX語言環境很有用,比較http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal-with-the-nsdateformatter-locale -特徵。 - 如果日期本身不應該在當地時區解釋,則可以設置時區。我不知道這是否也是一個問題。 –