2017-06-18 18 views
0

JSONデータベースから日付を取得しています。日付は2017-06-16T13:38:34.601767(ISO8601と思う)のように書式設定されています。 ISO8601DateFormatterを使用して、2017-06-16T13:38:34.601767から2017-06-16に日付を書式設定しようとしています。今のところ私は引き出された文字列を日付としてフォーマットすることさえできません。ISO8601文字列を再フォーマットされた日付文字列に変換します(Swift)

let pulledDate = self.pulledRequest.date 
var dateFormatter = ISO8601DateFormatter() 
let date = dateFormatter.date(from: pulledDate) 
print(date!) //nil 

私は日付の形式が間違って持っているかはわからないと私はISO8601DateFormatterを使用していない場合には、意図したとおりにISO8601ではありませんか。

1.)ISO8601の日付ですか?
2.)ISO8601DateFormatterを正しく使用していますか?

ありがとうございます!

+0

は、あなたがあなたのミリ秒単位のブロックで6桁(0.601767)を持っていることを確認していますか? –

+0

残念ながら、はい。それも私を投げている。私はどこか他の人を見ました(私は知っている、それは助けて笑)彼らは同じことを持っていたと言ったISO8601 – froggomad

答えて

2

ISO8601には、タイムゾーンを含むいくつかの異なるオプションがあります。デフォルトでは、ISO8601DateFormatterは文字列にタイムゾーンインジケータが必要です。あなたはそのようなカスタムオプションを使用すると、この動作を無効にすることができます

let pulledDate = "2017-06-16T13:38:34.601767" 
var dateFormatter = ISO8601DateFormatter() 
dateFormatter.formatOptions = [.withYear, .withMonth, .withDay, .withTime, .withDashSeparatorInDate, .withColonSeparatorInTime] 
let date = dateFormatter.date(from: pulledDate) 

あなただけの遊び場にこのコードを実行し、デフォルトのオプションが何であるかを知りたい場合は、次の

let dateFormatter = ISO8601DateFormatter() 
let options = dateFormatter.formatOptions 
options.contains(.withYear) 
options.contains(.withMonth) 
options.contains(.withWeekOfYear) 
options.contains(.withDay) 
options.contains(.withTime) 
options.contains(.withTimeZone) 
options.contains(.withSpaceBetweenDateAndTime) 
options.contains(.withDashSeparatorInDate) 
options.contains(.withColonSeparatorInTime) 
options.contains(.withColonSeparatorInTimeZone) 
options.contains(.withFullDate) 
options.contains(.withFullTime) 
options.contains(.withInternetDateTime) 

もちろん、あなたの場合文字列にタイムゾーンが含まれていない場合、日付フォーマッタは、timeZoneプロパティを使用してタイムゾーンでそれを解釈します。これは、ドキュメンテーションによると、GMTがデフォルトです。

は、異なるタイムゾーンにあなたの日付を解釈したい場合は、フォーマッタを使用する前に、それを変更することを忘れないでください:

dateFormatter.timeZone = TimeZone(identifier: "Europe/Paris") 
+0

出力は2017-06-16 13:38:34 +0000 - を使用して+0000を切り捨てる方法はありますか?フォーマッター? – froggomad

+1

同じオプションと 'withSpaceBetweenDateAndTime'オプションを指定した別のフォーマッタを使用してください。 – deadbeef

関連する問題