2016-11-01 14 views
2

を返す私はdateFormatterを次ています文字列の日付が間違っている時間

var date = Date() 
var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 
let timeZone = NSTimeZone(name:"UTC+01:00") 
dateFormatter.timeZone = timeZone as TimeZone! 

let sweDate = dateFormatter.string(from: date) 

そして、私がプリントアウトしたとき、私は、これらの値を取得する:

1: print(date) // 2016-11-01 10:16:19 +0000 
2: print("\(dateFormatter.string(from: date))") // 2016-11-01 11:16:35 
3: print(dateFormatter.date(from: sweDate)!) // 2016-11-01 10:16:41 +0000 

第二の値がで正しいものです文字列形式ですが、Date()に変換すると、間違った時刻になります第3の印刷。なぜこれが起こり、どのように解決するのですか?スウェーデンのタイムゾーンです。

+0

これで、' dateFormatter.date(from:sweDate)! 'と何もしません!) '? 2番目の値を 'Date'にするにはどうすればいいですか? –

+0

'Date'はタイムゾーンを保存しないので、フォーマット時に使用したタイムゾーンに関係なく、常にUTC時刻が出力されます。 – ozgur

+0

@ozgur、はい私はそれを持っていますが、 'String'ではなく' Date'に2番目の値を取得するにはどうしたらいいですか? –

答えて

1

文字列 'sweDate'はタイムゾーンの情報を含んでいないので、ゼロゾーンの時間を取得します。

-1

実際には正しい時刻ですが、あなたが言ったように、それは異なるタイムゾーンであり、それは単にバックエンドに保存されている方法です。 DateFormatterを使用してDateからStringに戻る限り、ユーザーは決して知らないでしょう。

あなたはいつもあなたが必要な正確に何を表示するには、異なるDateFormattersを使用することができます。http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

例: "YYYY-MM-dd'T'HH:MM:SSのZZZZZ" は「2016-11-01T11をもたらすであろう。 16:35 +01:00 "

関連する問題