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")
は、あなたがあなたのミリ秒単位のブロックで6桁(0.601767)を持っていることを確認していますか? –
残念ながら、はい。それも私を投げている。私はどこか他の人を見ました(私は知っている、それは助けて笑)彼らは同じことを持っていたと言ったISO8601 – froggomad