So erhalten Sie die aktuelle Uhrzeit in Swift: 5 fatale Fehler und ihre Lösung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Zeit ist nicht nur eine Zahl: Warum selbst erfahrene Entwickler Fehler machen

\n\n

Jeder iOS-Entwickler stand schon einmal vor der Aufgabe: „Ich muss einfach die aktuelle Uhrzeit abrufen“. Was könnte einfacher sein? Doch genau hier, auf scheinbar glattem Boden, machen Anfänger (und nicht nur sie) Fehler, die später zu Bugs, App-Abstürzen und unzufriedenen Nutzern führen.

\n\n

In diesem Artikel analysieren wir die fünf häufigsten Fehler bei der Arbeit mit der aktuellen Uhrzeit in Swift, die auf Stack Overflow tausende Aufrufe gesammelt haben. Sie erfahren, wie Sie diese vermeiden und sauberen, zuverlässigen Code schreiben.

\n\n
„Ich möchte einfach die aktuelle Uhrzeit als datetime in Swift abrufen, bekomme aber entweder nil oder nicht das, was ich erwartet habe. Hilfe!“ – typischer Hilferuf in Foren.
\n\n

Lassen Sie uns herausfinden, was schief läuft.

\n\n

1. Fehler mit DateFormatter: Die Locale – der Hauptfeind

\n\n

Problem

\n

Die häufigste Anfrage: „Swift get current time as datetime string“. Der Entwickler schreibt:

\n\n
let dateFormatter = DateFormatter()\ndateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"\nlet currentTime = dateFormatter.string(from: Date())\nprint(currentTime) // Funktioniert alles? Nicht ganz
\n\n

Im Simulator oder auf einem Gerät mit englischer Locale funktioniert alles einwandfrei. Aber sobald der Benutzer in den Einstellungen z.B. Deutsch oder Russisch auswählt, erhalten Sie nil oder ein unerwartetes Format.

\n\n

Warum passiert das?

\n

Standardmäßig verwendet DateFormatter die aktuelle Locale des Geräts. Für feste Datumsformate, die in APIs geparst oder angezeigt werden, ist das eine Katastrophe.

\n\n

Lösung

\n

Setzen Sie für Formate, die nicht für die Benutzeranzeige bestimmt sind, immer die Locale en_US_POSIX:

\n\n
let dateFormatter = DateFormatter()\ndateFormatter.locale = Locale(identifier: "en_US_POSIX")\ndateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"\ndateFormatter.timeZone = TimeZone.current // Zeitzone nicht vergessen!\nlet currentTime = dateFormatter.string(from: Date())\nprint(currentTime) // "2024-12-25 14:30:00" – stabil
\n\n
Merken Sie sich: en_US_POSIX ist Ihr bester Freund bei der Arbeit mit festen Datumsformaten in Swift.
\n\n

2. Ignorieren der Zeitzone (TimeZone)

\n\n

Problem

\n

Sie haben einen String mit der aktuellen Uhrzeit erhalten. Aber welche Uhrzeit haben Sie tatsächlich bekommen? Lokal? UTC? Serverzeit? Der Fehler tritt auf, wenn der Entwickler keine timeZone im DateFormatter angibt.

\n\n

Beispiel für einen Fehler:

\n
let formatter = DateFormatter()\nformatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"\nlet now = formatter.string(from: Date())\n// Ergebnis: "2024-12-25T14:30:00+0300" – das ist die lokale Zeit mit Offset\n// Aber was, wenn Sie immer UTC benötigen?
\n\n

Lösung

\n

Geben Sie immer explizit die TimeZone an:

\n\n
// Für die Arbeit mit dem Server (UTC)\nlet utcFormatter = DateFormatter()\nutcFormatter.timeZone = TimeZone(abbreviation: "UTC")\nutcFormatter.locale = Locale(identifier: "en_US_POSIX")\nutcFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"\nlet utcTime = utcFormatter.string(from: Date())\nprint(utcTime) // "2024-12-25T11:30:00Z"\n\n// Für die Anzeige für den Benutzer (seine lokale Zeit)\nlet localFormatter = DateFormatter()\nlocalFormatter.timeZone = TimeZone.current\nlocalFormatter.dateStyle = .medium\nlocalFormatter.timeStyle = .short\nlet localTime = localFormatter.string(from: Date())\nprint(localTime) // "25.12.2024, 14:30"
\n\n

3. Verwendung von Date() für Vergleiche: Fallstricke

\n\n

Problem

\n

Viele denken, dass Date() innerhalb eines Aufrufs denselben Wert zurückgibt. Das stimmt aber nicht. Swift Date ist eine Momentaufnahme der Zeit. Wenn Sie Date() zweimal im Code aufrufen, können die Werte um Mikrosekunden abweichen.

\n\n


                
                

Blogs

Buchempfehlungen