2016-11-01 5 views
2

ich habe folgend dateFormatter:String Datum Datum gibt falsche Zeit

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) 

Und wenn ich mich diese Werte erhalte ausdrucken:

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 

Der zweite Wert ist die richtige in String-Format, aber wenn ich es in Date() konvertieren, bekomme ich die falsche Zeit, dritten Druck. Warum passiert das und wie löse ich es? Es ist schwedische Zeitzone.

+0

Ok, also macht es nichts mit dem' dateFormatter.date (from: sweDate)! '' Dann? Wie kann ich den zweiten Wert zu "Date" bekommen? –

+0

"Datum" speichert die Zeitzone nicht, so dass immer die UTC-Zeit gedruckt wird, unabhängig davon, welche Zeitzone beim Formatieren verwendet wurde. – ozgur

+0

@ozgur, ja ich habe es aber wie kann ich den zweiten Wert zu "Date" anstelle von "String" bekommen? –

Antwort

1

Da String 'sweDate' keine Info der Zeitzone enthält, erhalten Sie die Zeit für die Nullzone.

-1

Es ist eigentlich die richtige Zeit, aber wie du schon sagtest, es ist eine andere Zeitzone und das ist einfach so, wie es im Backend gespeichert ist. Solange Sie DateFormatter immer verwenden, um von Datum zu Zeichenfolge zurückzukehren, würde der Benutzer nie wissen.

Sie können jederzeit verschiedene DateFormatters verwenden, um genau zu zeigen, was Sie brauchen: http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns

Ex: "yyyy-MM-dd'T'HH: mm: ss ZZZZZ" ergäbe „2016-11-01T11: 16:35 +01: 00 "