Hi Ich versuche zu überprüfen, ob die aktuelle Zeit in einem Zeitbereich liegt, sagen wir 8:00 - 16:30. Mein Code unten zeigt, dass ich die aktuelle Zeit als eine Zeichenfolge abrufen kann, aber ich bin mir nicht sicher, wie ich diesen Wert verwenden kann, um zu überprüfen, ob es sich innerhalb des oben angegebenen Zeitraums befindet. Jede Hilfe würde sehr geschätzt werden!
%Vor%Es gibt viele Möglichkeiten, dies zu tun. Persönlich mag ich nicht mit Strings arbeiten, wenn ich es vermeiden kann. Ich würde lieber mit Datumskomponenten umgehen.
Im Folgenden finden Sie einen Spielfeldcode, der einen NSCalendar verwendet, um den Tag / Monat / Jahr des aktuellen Datums abzurufen, die gewünschten Stunden- / Minutenkomponenten hinzuzufügen und dann ein Datum für diese Komponenten zu generieren.
Es erstellt Daten für 8:00 und 16:30 und vergleicht dann die Daten, um zu sehen, ob das aktuelle Datum / die aktuelle Zeit in diesen Bereich fällt.
Es ist länger als der Code anderer Leute, aber ich denke, es lohnt sich zu lernen, wie man Berechnungen mit Daten unter Verwendung von NSCalendar durchführt:
%Vor%Der Code in dieser Antwort hat eine Menge für Swift 3 geändert.
Anstatt NSDate
zu verwenden, macht es uns mehr Sinn, das native Date
-Objekt und Date
-Objekte sind Equatable
und Comparable
"out of the box".
Damit können wir die Erweiterungen Equatable
und Comparable
und die Definitionen für die Operatoren <
, >
und =
loswerden.
Dann müssen wir die Syntax in der dateAt
-Funktion so anpassen, dass sie der Swift 3-Syntax folgt. Die neue Erweiterung sieht in Swift 3 so aus:
Beachten Sie, dass @CodenameDuchess 'Antwort eine Systemfunktion verwendet, dateBySettingHour:minute:second:ofDate:options:
, die das tut, was meine dateAt(hours:minutes:)
-Funktion tut, aber viel einfacher. Sie könnten meine benutzerdefinierte Funktion vollständig eliminieren und durch dateBySettingHour:minute:second:ofDate:options:
ersetzen.
Mit dieser Funktion kann der Code folgendermaßen vereinfacht werden:
%Vor%In Swift 3.0 können Sie den neuen Werttyp Date verwenden und direkt mit ==, & gt;, & lt; vergleichen. usw.
%Vor%Sehr praktisch.
Schnell 3
Dies ist eine Funktion, die einen String zurückgibt, indem verglichen wird, ob die aktuelle Zeit in einem Bereich gegebener Zeiten liegt. Führen Sie es auf einem Spielplatz aus und passen Sie es Ihren eigenen Bedürfnissen an.
%Vor%}
Sie könnten NSDate
konform zum Protokoll Comparable
machen, um die Operatoren ==
, !=
, <=
, >=
, >
und <
verwenden zu können. Zum Beispiel:
Um zu überprüfen, ob ein Datum innerhalb von zwei Daten liegt, können Sie Folgendes verwenden:
%Vor% Hier sind einige Beispiele, wie man die Operatoren mit NSDate
:
auch, die Lösung unten sieht kurz aus, wenn ich sehen möchte, ob die Zeit in einem bestimmten Bereich während des Tages ist
%Vor%Ich denke, Sie könnten es ändern, um beispielsweise zu überprüfen, ob die Monate auch in bestimmten Bereichen liegen, z. B.
%Vor%und weiter von dort ...