2017-04-27 2 views
-1
 let dateFormatter = DateFormatter() 
     let dateFormatter2 = DateFormatter() 

     dateFormatter.timeZone = TimeZone(abbreviation: "UTC") 

     dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 

     let date = dateFormatter.date(from: event!) 

     dateFormatter2.timeZone = TimeZone.current 
     let dateString = dateFormatter2.string(from: date!) 

     let finalDate = dateFormatter2.date(from: dateString) 
     return finalDate! 

Ich habe Sportereignisse, die mir Datumsangaben in UTC geben, die ich in Ortszeit zu konvertieren versuche. Dieser Code ähnelt den Dutzenden von Beispielen auf dieser Website, wenn Sie diese Frage stellen, aber es funktioniert nicht.Warum funktioniert die Konvertierung von UTC in lokalen Code nicht?

+0

hinzufügen Was das Format der Veranstaltung. –

+2

Was ist die Eingabe und die tatsächliche und erwartete Ausgabe? Warum konvertierst du String -> Datum -> String -> Datum? Bitte beachten Sie, dass "Datum" einen absoluten Zeitpunkt und ** keine Zeitzone ** beschreibt. –

+0

@Daniel Nein, zitieren Sie nicht das 'Z' im Formatierer. – rmaddy

Antwort

1

Dies ist der ISO8601 Formatierer:

static let iso8601: DateFormatter = { 
    let formatter = DateFormatter() 
    formatter.calendar = Calendar(identifier: .iso8601) 
    formatter.locale = Locale(identifier: "en_US_POSIX") 
    formatter.timeZone = TimeZone(secondsFromGMT: 0) 
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 
    return formatter 
}() 

Damit wird die Zeichenfolge in eine Date.

Sie müssen die Zeitdifferenz, höchstwahrscheinlich durch TimeZone.autoupdatingCurrent

+0

Können Sie erklären, wie ich den Zeitunterschied hinzufügen kann? Tue ich es, nachdem ich das Datum von einer Zeichenkette gemacht habe, oder vorher? –

+0

Nun können Sie zuerst, in dem Code, den ich Ihnen gezeigt habe, die Zeitzone zu TimeZone.autoUpdatingCurrent ändern und dann TimeZone.autoUpdatingCurrent.daylightSavingsTimeOffset() hinzufügen – SeanLintern88

Verwandte Themen