2017-04-08 15 views
-1

私が何をしても、RSSのpubDate(もちろん文字列です)をDateに変換することはできません。ここでswift 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

はありません、それがない(資本Hための24時間の時間で)でなければなりませんうまくいかない。 @Ahamd FとPalleが述べたように、間違いは "HH"の代わりに "hh"を1時間使用していました。彼らに多くのおかげです.. – tdm3732

答えて

3

あなたはbuffers["pubDate"]!「は日、2017年4月2日19時31分18秒GMT」(または同じ形式で任意の日付)に等しいことをかなり確信している場合、それは次のようになります。

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-より安全-fromであることを次のように、私は、を結合いくつかオプションを行うことをお勧めしたい:

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

+0

それはロケールの問題ではない、その形式自体については、私はdownvoter btwではない:) –

+0

はい、私はそれを考え出した。ロケールが変更され、フォーマットが 'hh'の代わりに' HH'に更新された場合、私のために動作します。 – Palle

+0

はい、ロケールではなく時間が問題でした。私は実際にNew York Timesでそれをテストしています。私はそれがもっと標準を得ることができないと思います – tdm3732

関連する問題