2017-04-08 70 views
-1

無論我做什麼,都無法將RSS發佈日期(這是一個字符串)轉換爲Dateswift 3 - 無法將字符串轉換爲日期

下面是日期字符串:Sun, 02 Apr 2017 19:31:18 GMT

這裏是我的代碼:

private var dateBuffer: Date { 
    formatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss zzz" 
    let date = formatter.date(from: buffers["pubDate"]!) //<-date comes back nil 
    return date! //<-program crashes 
} 

date總是返回nil。什麼可能是問題?

+0

不,它不行。 @Ahamd F和Palle指出,錯誤是用「hh」代替「HH」。非常感謝他們.. – tdm3732

回答

3

如果您是非常肯定buffers["pubDate"]!等於「孫,2017年4月2日19時31分18秒格林尼治標準時間」(或具有相同格式的任何日期),那麼就應該是:

var dateBuffer: Date { 
    let formatter = DateFormatter() 
    formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz" 
    let date = formatter.date(from: buffers["pubDate"]!) 
    return date! 
} 

請注意,區別是HH:mm:ss而不是hh:mm:ss。爲了將小時看作24小時慣例,您應該使用HH

而且,更安全 - 從任何意外crash-,我建議你做一些可選結合,如下:

var dateBuffer: Date? { 
    let formatter = DateFormatter() 
    let str:String? = "Sun, 02 Apr 2017 19:31:18 GMT" 

    formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz" 
    if let pubDate = buffers["pubDate"], let date = formatter.date(from: pubDate) { 
     return date 
    } 

    return nil 
} 

if let myDate = dateBuffer { 
    print(myDate) 
} 
+0

Shukran艾哈邁德先生,問題解決 – tdm3732

-1

它看起來像您正在使用另一種語言/區域設置比英文,但您的平日名稱是英文(「Sun」)。

格式化會按預期工作,如果區域設置爲英語:

formatter.locale = Locale(identifier: "en") 

此外,格式必須爲EEE, dd MMM yyyy HH:mm:ss zzz(用大寫的H,因爲24小時的時間)

+0

這不是一個本地化問題,它關於格式本身,我不是downtwoter btw :) –

+0

是的,我想通了。它適用於我,如果區域設置都更改並且格式更新爲'HH'而不是'hh'。 – Palle

+0

是的,這是小時問題,而不是語言環境。我實際上正在與紐約時報進行測試。我想它不能得到更多的標準 – tdm3732