Umwandel String zu Date - 2 Stunden Differenz

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Umwandel String zu Date - 2 Stunden Differenz

    Hallo zusammen,

    ich habe ein String in dem Format 15.06.23, 09:30 und möchte diesen in ein Date umwandeln. Dabei bekomme ich immer eine 2 Stunden Differenz: 2023-06-15 07:30:00 +0000.

    Das ist mein Code:

    let dateFormatter = DateFormatter()
    let dateFormat = "dd.MM.yy, HH:mm"

    dateFormatter.dateFormat = dateFormat
    dateFormatter.locale = Locale(identifier: "de_DE")
    dateFormatter.timeZone = TimeZone(identifier: "Europe/Berlin")

    if let date = dateFormatter.date(from: dateAsString) {
    print(date)
    } else {
    print("Fehler beim Umwandeln des Datums")
    }

    Wo liegt mein Fehler?

    Danke schon mal im Voraus...
  • Nix ... aber Du gibst die Zeit in UTC aus (der Fomatter ist ja nur für's Interpretieren beim Zuweisen. Aber eigentlich ist doch alles gut: Intern würde ich Timestamps immer in UTC führen: Du könntest dann zur Ausgabe wieder einen - oder den - Formatter nutzen, um in CEST oder einer anderen Zone auszugeben.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Identifiziere ich die TimeZone so funktioniert es:

    dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone?

    Will ich aber die TimeZone des Nutzers herausfinden, habe ich weiter die 2h Differenz:

    let calendar = Calendar.current
    let userTimeZone = calendar.timeZone.identifier
    print("userTimeZone: \(userTimeZone)") // Europe/Berlin

    dateFormatter.timeZone = TimeZone(identifier: userTimeZone) // Ich weise hier doch dem dateFormatter die richtige TimeZone zu!?!

    if let date = dateFormatter.date(from: dateAsString) {
    print(date) // Hier habe ich die 2h Differenz
    } else {
    print("Fehler beim Umwandeln des Datums")
    }

    Sorry, ich stehe offensichtlich auf'm Schlauch.
  • Du übergibst der print()-Funktion das vom DateFormatter zurückgelieferte Date Objekt. print() liefert lediglich die debugDescription (einen String) des Date Objektes zurück, die in der Date Klasse eben so implementiert ist, dass einfach ein Datum-String für die Zeitzone GMT/UTC zurückgeliefert wird, egal, ob du mit deinem Mac gerade in Deutschland, Japan oder sonstwo sitzt.

    Du musst die Instanz deines DateFormatters auch zur Ausgabe des formatierten Datum-Strings verwenden, z.B. mit der Funktion string(from date: Date).