wie überprüft werden kann, ob die Zeit innerhalb eines bestimmten Bereichs in swift liegt

9

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%     
redman 15.04.2015, 14:18
quelle

9 Antworten

15

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%

BEARBEITEN:

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:

Schnelle 3 Version:

%Vor%

BEARBEITEN # 2:

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%     
Duncan C 15.04.2015, 15:45
quelle
7

In Swift 3.0 können Sie den neuen Werttyp Date verwenden und direkt mit ==, & gt;, & lt; vergleichen. usw.

%Vor%

Sehr praktisch.

    
CodenameDuchess 14.09.2016 20:55
quelle
5

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%

}

    
Juan Felipe Gallo 23.03.2017 17:48
quelle
2

Sie könnten NSDate konform zum Protokoll Comparable machen, um die Operatoren == , != , <= , >= , > und < verwenden zu können. Zum Beispiel:

%Vor%

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 :

benutzt %Vor%     
ABakerSmith 15.04.2015 15:17
quelle
2

Sie können Jahr, Monat und Tag ab dem heutigen Datum abrufen, indem Sie diese an diese Datumszeitzeichenfolgen anhängen, um neue NSDate -Objekte zu erstellen. Dann compare the todaysDate auf diese beiden resultierenden NSDate -Objekte:

%Vor%     
Rob 15.04.2015 15:07
quelle
1

Hier ist ein Code, den ich in einem meiner aktuellen Projekte verwende. Stellen Sie einfach die Startzeit als 8:00 Uhr, die Endzeit als 16:30 Uhr und die Zeitmarke als aktuelle Uhrzeit ein.

%Vor%     
boidkan 15.04.2015 14:50
quelle
1

Sie können die Methode compare von NSDate verwenden: Sie gibt eine NSComparisonResult ( OrderedSame , OrderedAscending oder OrderedDescending ) zurück, die Sie mit Ihrem Start- und Enddatum vergleichen können:

%Vor%     
Moritz 15.04.2015 14:52
quelle
0

Sie können das Datum wie folgt vergleichen.

%Vor%     
pradeepchauhan_pc 09.02.2017 05:58
quelle
0

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 ...

    
nyxee 22.05.2017 14:59
quelle

Tags und Links