Ich habe eine ISO-8601 Datumszeichenkette wie folgt: "2017-02-07T00:00:00-08:00"
.Wie TimeZone aus Date-Objekt extrahieren?
Wie kann ich das TimeZone-Objekt von diesem Datum extrahieren?
Ich habe eine ISO-8601 Datumszeichenkette wie folgt: "2017-02-07T00:00:00-08:00"
.Wie TimeZone aus Date-Objekt extrahieren?
Wie kann ich das TimeZone-Objekt von diesem Datum extrahieren?
Sie könnten einen Datumsformatierer erstellen, der nur die Zeitzone wie folgt zurückgibt. Ändern Sie die Abkürzung in die Zeitzone, nach der Sie suchen.
let timeZoneOnlyDateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.timeZone = TimeZone(abbreviation: "UTC")
formatter.dateStyle = .none
formatter.timeStyle = .none
return formatter
}()
Und verwenden Sie diese Funktionen, um es in eine Zeichenfolge zu konvertieren oder Ihre Zeichenfolge in ein Datum zu konvertieren.
func formatDateIntoString(date: Date, dateFormatter: DateFormatter) -> String {
return dateFormatter.string(from: date)
}
func formatStringIntoDate(string: String, dateFormatter: DateFormatter) -> Date! {
return dateFormatter.date(from: string)
}
Leider ist DateFormatter
keine Hilfe, da Sie kein Date
wollen noch liefert es keine Informationen über jede Zeitzone Daten zu einem Zeitpunkt analysiert String. Und TimeZone
hat keinen Initialisierer, der eine Zeitzonenversatzzeichenfolge analysieren kann.
Sie müssen also die Arbeit selbst erledigen. Da Sie eine feste Format-Datumszeichenfolge haben, wissen Sie, dass der Zeitzonen-Offset immer die letzten 6 Zeichen der Zeichenfolge sein wird. Die letzten 2 davon sind die Anzahl der Minuten und die ersten 3 davon sind die Anzahl der Stunden (einschließlich des Zeichens).
Extrahieren Sie diese beiden Teilzeichenfolgen (Stunden und Minuten) aus der Datumszeichenfolge. Konvertieren Sie beide in Int
. Dann machen Sie eine einfache Mathematik, um einen Offset in Sekunden zu berechnen (Stunden * 3600 + Minuten * 60).
Sobald Sie diesen Offset in Sekunden haben, können Sie eine TimeZone
Instanz mit dem init(secondsFromGMT:)
Initialisierer erstellen.
Es gibt keine Zeitzone in einem 'Date'-Objekt. Bitte klären Sie, was Sie eigentlich wollen. – rmaddy
Ich habe die Frage aktualisiert, thx. – TruMan1
Sie haben keine Zeitzone. Sie haben einen Offset von UTC. Siehe "time zone! = Offset" im [timezone tag wiki] (http://stackoverflow.com/tags/timezone/info). –