Einen vollständigen Tag stellt man dar, indem man seinen Anfang einschließt und den Beginn des Folgetags ausschließt. Für einen Veröffentlichungsmarker in Mac Kalender erstellst du ein ganztägiges Ereignis; in iCalendar-Daten bezeichnet ein explizites Enddatum den ersten Tag außerhalb des Ereignisses.
Dieser Leitfaden verwendet als synthetisches Veröffentlichungsdatum den 18. Juni 2027. Die Aufgabe besteht darin, einen vollständigen Veröffentlichungstag in deinen Mac-Kalender einzutragen, ihn zu exportieren und seine Grenzen zu überprüfen. Dieselbe Überlegung hilft dir, Fehler zu erkennen, wenn ein Datum zwischen einem Kalender, einer Tabelle und einer Automatisierung übertragen wird.
Was bedeutet eine exklusive Grenze am Folgetag?
Beim synthetischen Veröffentlichungstag ist der 18. Juni das eingeschlossene Datum. Der 19. Juni ist das erste ausgeschlossene Datum. Als halboffenes Intervall geschrieben lautet der Bereich [2027-06-18, 2027-06-19): Die eckige Klammer schließt den Anfang ein, die runde Klammer schließt das Ende aus.
Der iCalendar-Standard legt fest, dass DTSTART eines Ereignisses inklusiv und DTEND nicht inklusiv ist. Ein ganztägiges Ereignis verwendet für beide Datumswerte. Ein Enddatum am Folgetag beschreibt somit einen vollständigen Tag. Datumswerte ohne Uhrzeit dürfen keinen Parameter TZID enthalten. RFC 5545, Ereigniskomponenten und Zeitzonenkennungen.
Dieses veranschaulichende Fragment zeigt nur die beiden Grenzwerte und keine vollständige, importierbare Kalenderdatei:
DTSTART;VALUE=DATE:20270618
DTEND;VALUE=DATE:20270619
Die folgende Entscheidungstabelle wendet diese Regel auf synthetische Veröffentlichungspläne an. Lies die letzte Spalte als erstes ausgeschlossenes Datum, nicht als weiteren Veröffentlichungstag.
| Beabsichtigter Zeitraum | Eingeschlossenes Startdatum | Exklusives Enddatum |
|---|---|---|
| Nur der 18. Juni | 18. Juni 2027 | 19. Juni 2027 |
| Einschließlich 18.–20. Juni | 18. Juni 2027 | 21. Juni 2027 |
| Nur der 30. Juni | 30. Juni 2027 | 1. Juli 2027 |
Veröffentlichungstag in Mac Kalender erstellen
Beginne mit einem Kalender, in dem du Ereignisse erstellen kannst. Für diese Aufgabe benötigst du die Steuerelemente für ganztägige Ereignisse in Kalender; Programmierwerkzeuge sind nicht erforderlich.
- Öffne Kalender und navigiere zum 18. Juni 2027.
- Wähle oben im Fenster
TagoderWocheaus. - Doppelklicke am 18. Juni auf den Bereich
all-dayüber dem Stundengitter. - Gib dem Ereignis den neutralen Titel
Beispiel-Veröffentlichungstag. - Prüfe, ob der Marker nur den 18. Juni umfasst.
Apple beschreibt das Doppelklicken auf den Ganztagsbereich in der Ansicht Tag oder Woche als Vorgehensweise zum Erstellen eines ganztägigen Ereignisses. Außerdem beschreibt Apple das Ziehen über mehrere Datumsfelder hinweg, um ein mehrtägiges Ereignis zu erstellen. Verwende in diesem Beispiel die Aktion für einen einzelnen Tag. Ganztägige, mehrtägige oder wiederkehrende Ereignisse in Kalender auf dem Mac einrichten.
Betrachte den sichtbaren Kalender als erste Prüfung: Der Marker sollte das gewünschte Datum abdecken und sich nicht auf den 19. Juni erstrecken. Die exklusive Grenze beschreibt, wie der Zeitraum in Daten dargestellt wird. Sie ist keine Anweisung, den sichtbaren Marker auf einen weiteren Tag auszudehnen.
Ereignis exportieren und Datumsgrenzen prüfen
Wähle in der Kalenderliste den Kalender des Ereignisses aus und dann Ablage > Exportieren > Exportieren. Speichere die daraus entstehende .ics-Datei an einem geeigneten Ort. Bei diesem Vorgang werden die Ereignisse des ausgewählten Kalenders exportiert. Enthält ein Kalender mehrere Ereignisse, enthält die Datei entsprechend mehrere Ereignisdatensätze. Apple dokumentiert .ics als Format für diesen Export. Kalender auf dem Mac importieren oder exportieren.
Wähle im Finder die exportierte Datei aus und öffne sie über Ablage > Öffnen mit in einem Texteditor wie TextEdit. Apple beschreibt dies als Möglichkeit, eine App zum einmaligen Öffnen einer Datei auszuwählen. Eine App zum Öffnen einer Datei auf dem Mac auswählen.
Suche nach Beispiel-Veröffentlichungstag und prüfe dann den umgebenden Ereignisdatensatz. Vergleiche dessen Start- und Endeigenschaften mit dem obigen veranschaulichenden Fragment. Weitere Eigenschaften sind zu erwarten; konzentriere dich auf die Datumswerte und ihre Typen.
Wenn bei einem ganztägigen Ereignis weder DTEND noch DURATION vorhanden ist, weist der Standard ihm eine Dauer von einem Tag zu. Ein fehlendes explizites Ende weist daher nicht automatisch auf ein Problem hin. RFC 5545, Ereigniskomponenten.
Verwende den Export als Diagnosekopie. Wenn das sichtbare Ereignis die falschen Daten abdeckt, korrigiere es in Kalender und exportiere es erneut. So bezieht sich deine Prüfung auf das Ereignis, das du tatsächlich erstellt hast.
Kalenderdaten, Zeitpunkte, Offsets und benannte Zeitzonen unterscheiden
Bevor du den Veröffentlichungstag in ein anderes Werkzeug überträgst, ermittle, welche Art von Wert dieses Werkzeug erwartet. Eine Kalenderangabe und ein Zeitstempel beantworten unterschiedliche Fragen.
| Konzept | Veranschaulichender Wert | Bezeichnet |
|---|---|---|
| Kalenderdatum | 2027-06-18 |
Einen Kalendertag ohne Uhrzeit |
| Zeitpunkt | 2027-06-18T10:00:00Z |
Einen Punkt auf der Zeitachse |
| Numerischer UTC-Offset | +02:00 |
Die Abweichung der Ortszeit von UTC |
| Benannte Zeitzone | Europe/Paris |
Eine Zeitzone, deren Regeln die geltenden Offsets bestimmen |
RFC 3339 definiert Zeitstempeldarstellungen für Zeitpunkte, einschließlich numerischer Offsets und der UTC-Kennung Z. Intervallbeschreibungen schließt die Norm ausdrücklich aus ihrem Anwendungsbereich aus. Für ein Paar von RFC-3339-Zeitstempeln braucht es daher weiterhin eine separate Vereinbarung dazu, ob der Endpunkt eingeschlossen ist. RFC 3339, Geltungsbereich und Datums-/Zeitformat.
Beispielsweise bezeichnen die synthetischen Zeitstempel 2027-06-18T12:00:00+02:00 und 2027-06-18T10:00:00Z denselben Zeitpunkt. Keiner von beiden drückt einen vollständigen Veröffentlichungstag aus. Wenn du einem Datum eine Uhrzeit und einen Offset hinzufügst, ändert sich die aufgezeichnete Information. RFC 3339, lokale Offsets.
Eine benannte Zeitzone liefert Regeln zur Berechnung der Ortszeit und des jeweils geltenden Offsets. IANA verwaltet diese Regeln einschließlich Änderungen der Offsets und des Sommerzeitverhaltens; Anbieter von Betriebssystemen und Software stellen den Nutzern Aktualisierungen bereit. Bei der Berechnung von Grenzen für verschiedene Daten kann ein einzelner numerischer Offset diesen Regelsatz nicht ersetzen. IANA-Zeitzonen.
Behalte für den Kalendermarker das Kalenderdatum bei. Wenn eine spätere Aufgabe fragt, welche mit Zeitstempeln versehenen Veröffentlichungen zu diesem Tag gehören, wähle zuerst die benannte Zeitzone aus, die den Veröffentlichungstag festlegt, und berechne dann in dieser Zeitzone die beiden Grenzzeitpunkte.
Wie berechnet eine Mac-Automatisierung denselben Zeitraum?
Apples Date in Foundation stellt einen Zeitpunkt unabhängig von Kalender oder Zeitzone dar. Der Name kann irreführend sein, wenn deine Eingabe lediglich der 18. Juni ist: Ein Kalenderdatum benötigt einen Kalenderkontext, bevor es einen Zeitpunkt bestimmen kann. Apple empfiehlt, für Kalenderberechnungen Calendar zu verwenden. Date.
Lege für eine Automatisierung das Kalendersystem und die Zeitzone explizit fest. Foundation stellt die Zeitzone eines Kalenders über die beschreibbare Eigenschaft timeZone bereit. Wenn diese Auswahl explizit ist, bleibt die beabsichtigte Definition des Veröffentlichungstags für alle sichtbar, die die Automatisierung betreuen. Calendar.timeZone.
Ausgehend von einem Zeitpunkt, von dem bekannt ist, dass er in den gewünschten Tag fällt, ermittelt Calendar.dateInterval(of: .day, for:) Startzeit und Dauer dieser Kalenderkomponente. Die Methode liefert ein optionales Ergebnis; eine Automatisierung muss einen Fehlschlag behandeln, statt stillschweigend ein anderes Datum einzusetzen. dateInterval(of:for:).
Dabei ist ein Detail zum Endpunkt entscheidend: Apple dokumentiert DateInterval als geschlossenes Intervall, das beide Endpunkte einschließt. Um eine exklusive Grenze für den Veröffentlichungstag umzusetzen, verwende die berechneten Grenzen mit einem expliziten Vergleich: start <= instant && instant < end. Das ist die Zugehörigkeitsregel, kein vollständiges Programm. DateInterval.
Gehe nicht davon aus, dass jeder lokale Tag zu einer gewöhnlichen Mitternacht beginnt. Apples startOfDay(for:) gibt den ersten existierenden Moment des Tages zurück: Gibt es zwei Mitternächte, wählt es die erste; gibt es keine Mitternacht, wählt es den ersten tatsächlich existierenden Moment. Kalenderbasierte Grenzen bewahren diesen Unterschied. startOfDay(for:).
Grenze prüfen, bevor du das Datum wiederverwendest
Wende bei einem zeitstempelbasierten Ablauf diese Dreipunkt-Prüfung auf den berechneten Zeitraum an. Die erwarteten Ergebnisse ergeben sich direkt aus dem expliziten Vergleich mit dem exklusiven Ende.
| Testzeitpunkt | Erwartete Zugehörigkeit |
|---|---|
| Genau am Tagesanfang | Eingeschlossen |
| Beliebiger Zeitpunkt strikt zwischen den Grenzen | Eingeschlossen |
| Genau am Anfang des Folgetags | Ausgeschlossen |
Diese Prüfung erklärt auch, warum eine erfundene letzte Uhrzeit wie 23:59:59 unnötig ist. Enthält eine Eingabe Sekundenbruchteile, kann ein Wert nach dieser gewählten Grenzzeit trotzdem vor der Grenze des Folgetags liegen. Der Vergleich mit der exklusiven Grenze macht es überflüssig, die Zeitstempelgenauigkeit für „den letzten Moment“ festzulegen.
Schließe die Aufgabe am Mac-Desktop ab, indem du prüfst, ob Beispiel-Veröffentlichungstag nur den 18. Juni umfasst und ob seine exportierte Datumsdarstellung diesem Zeitraum entspricht. Wenn der Tag später als Zeitstempelfilter verwendet wird, behalte den ausgewählten Kalender und die Zeitzone bei, schließe den Anfang ein und die Grenze des Folgetags aus.
Quellen
Ganztägige, mehrtägige oder wiederkehrende Ereignisse in Kalender auf dem Mac einrichten — Apple.
Eine App zum Öffnen einer Datei auf dem Mac auswählen — Apple.
RFC 5545: Spezifikation des zentralen Objekts für Internet-Kalender und -Terminplanung (iCalendar) — RFC Editor.
RFC 3339: Datum und Uhrzeit im Internet: Zeitstempel — RFC Editor.
Zeitzonen — IANA.
Date — Apple Developer Documentation.
timeZone — Apple Developer Documentation.
dateInterval(of:for:) — Apple Developer Documentation.
DateInterval — Apple Developer Documentation.
startOfDay(for:) — Apple Developer Documentation.