2010-05-04 36 views
3

今天我的問題是關於日期格式和字符串。 我的應用程序從互聯網下載一些代表日期的字符串。日期格式總是像這樣:「2010-05-24 at 20:45」 我需要將此字符串轉換爲NSDate對象才能執行某些日期操作。 我試過這段代碼:來自String的日期使用NSDateFormatter無論12h-24h設置

NSString * dateString = @"2010-05-24 at 20:45" // actually downloaded from the internet 
NSDateFormatter * myDateFormatter = [[NSDateFormatter alloc] init]; 
[myDateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"]; 
NSDate * dateFromString = [myDateFormatter dateFromString:dateString]; 

這似乎完全正常工作,只要在iPhone設置爲24小時時鐘。只要我在常規設置中切換到12h時鐘,NSDate對象不會創建(並且應用程序高興地崩潰) 我已經閱讀了其他人有類似的問題,但我似乎找不到解決方案。 現在的問題: 只要我指定它應該用來解析字符串的哪種格式(這是不可修改的,因爲它來自網絡),我認爲NSDateFormatter對用戶設置是合理的),檢查用戶設置有什麼用處? 更重要的是,如何執行我的任務(無論用戶設置如何從字符串獲取NSDate對象)?

+0

好吧......字符串是可以修改的,我只是不想:) – user236739 2010-05-04 09:49:41

回答

5

This解釋了這個問題背後的原因以及如何解決這個問題。

+0

鏈接斷了。爲了避免這個問題,無論何時使用對其他站點的引用,都要粘貼代碼,然後粘貼鏈接。 – jpros 2016-10-25 22:15:34

+0

鏈接7年後更新:) – 2017-08-01 21:56:36

+0

用鏈接的內容更新你的文章,所以在未來它不會再出去。 – jpros 2017-08-02 14:01:20

4
NSString * dateString = @"2010-05-24 at 20:45" // actually downloaded from the internet 
NSDateFormatter * myDateFormatter = [[NSDateFormatter alloc] init]; 
[myDateFormatter setDateFormat:@"yyyy-MM-dd 'at' hh:mm"]; 
NSDate * dateFromString = [myDateFormatter dateFromString:dateString]; 

使用設定的日期格式

+0

工作!謝謝! – 2012-08-27 14:50:04

1

「HH」,而不是「HH」的我發現這篇文章從蘋果那正好說明這個問題! (https://developer.apple.com/library/content/qa/qa1480/_index.html

但無論如何,最簡單的答案是您需要將語言環境設置爲「en_US_POSIX」,以便它可以與任何用戶設置的日期相關的配置一起使用。

let stringDate = "2017-03-15T11:37:16-03:00" // ISO8601 formatted string 

let iso8601Formatter = DateFormatter() 
iso8601Formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
iso8601Formatter.locale = Locale(identifier: "en_US_POSIX") 
iso8601Formatter.date(from: stringDate) 
+0

好點,謝謝。 – user236739 2017-03-16 16:21:52