Representera en hel dag genom att inkludera dess början och exkludera början av följande dag. Skapa en heldagshändelse som publiceringsmarkör i Kalender på Mac. I iCalendar-data anger ett uttryckligt slutdatum den första dagen som inte ingår i händelsen.
Den här genomgången använder det fiktiva publiceringsdatumet 18 juni 2027. Uppgiften är att lägga in en hel publiceringsdag i kalendern på din Mac, exportera den och kontrollera dess gränser. Samma resonemang hjälper dig att upptäcka misstag när ett datum flyttas mellan en kalender, ett kalkylblad och en automatisering.
Vad innebär en exklusiv gräns vid nästa dag?
För den fiktiva publiceringsdagen är 18 juni det inkluderade datumet. 19 juni är det första exkluderade datumet. Som ett halvöppet intervall skrivs spannet [2027-06-18, 2027-06-19): den hakparentes som öppnas inkluderar början, och parentesen exkluderar slutet.
I iCalendar-standarden är DTSTART för en händelse inkluderande och DTEND exkluderande. En heldagshändelse använder datumvärden för båda. Därför anger ett slutdatum följande dag en hel dag. Datumvärden utan klockslag får inte ha en TZID-parameter. RFC 5545, händelsekomponenter och tidszonsidentifierare.
Det här illustrativa fragmentet visar endast de två gränsegenskaperna, inte en komplett kalenderfil som kan importeras:
DTSTART;VALUE=DATE:20270618
DTEND;VALUE=DATE:20270619
Följande beslutstabell tillämpar regeln på fiktiva publiceringsscheman. Läs den sista kolumnen som det första exkluderade datumet, inte som ytterligare en publiceringsdag.
| Avsett spann | Inkluderat startdatum | Exklusivt slutdatum |
|---|---|---|
| Endast 18 juni | 18 juni 2027 | 19 juni 2027 |
| 18–20 juni inklusive | 18 juni 2027 | 21 juni 2027 |
| Endast 30 juni | 30 juni 2027 | 1 juli 2027 |
Skapa publiceringsdagen i Kalender på Mac
Börja med en kalender där du kan skapa händelser. Du behöver kontrollerna för heldagshändelser i Kalender för den här uppgiften; inga programmeringsverktyg krävs.
- Öppna Kalender och gå till 18 juni 2027.
- Välj
DagellerVeckahögst upp i fönstret. - Dubbelklicka i området
all-dayovanför timrutnätet för 18 juni. - Ge händelsen den neutrala titeln
Exempel på publiceringsdag. - Kontrollera att markören endast täcker 18 juni.
Apple beskriver dubbelklick i heldagsområdet i vyn Dag eller Vecka som sättet att skapa en heldagshändelse. Apple beskriver separat hur du drar över flera datum för att skapa en flerdagshändelse. Använd enkeltdagsåtgärden i det här exemplet. Ställa in heldags-, flerdagars- eller upprepade händelser i Kalender på Mac.
Använd den synliga kalendern som din första kontroll: markören ska täcka det avsedda datumet utan att fortsätta in på 19 juni. Den exklusiva gränsen beskriver hur spannet representeras i data. Den innebär inte att den synliga markören ska sträcka sig över ytterligare en dag.
Exportera händelsen och granska datumgränserna
Markera händelsens kalender i kalenderlistan och välj sedan Arkiv > Exportera > Exportera. Spara den resulterande .ics-filen på en lämplig plats. Åtgärden exporterar händelserna i den valda kalendern, så en kalender med flera händelser skapar en fil med flera händelseposter. Apple anger .ics som format för den här exporten. Importera eller exportera kalendrar på Mac.
Markera den exporterade filen i Finder och använd Arkiv > Öppna med för att öppna den i en textredigerare, till exempel Textredigerare. Apple beskriver detta som ett sätt att välja ett program för att öppna en fil. Välja ett program för att öppna en fil på Mac.
Leta upp Exempel på publiceringsdag och granska den omgivande händelseposten. Jämför dess start- och slutelement med det illustrativa fragmentet ovan. Fler egenskaper är förväntade; fokusera på datumvärdena och deras typer.
Om en heldagshändelse saknar både DTEND och DURATION tilldelar standarden den en varaktighet på en dag. Att ett uttryckligt slut saknas är därför inte automatiskt ett tecken på problem. RFC 5545, händelsekomponenter.
Använd exporten som en diagnostisk kopia. Om den synliga händelsen täcker fel datum korrigerar du den i Kalender och exporterar igen. Då utgår kontrollen från händelsen du faktiskt skapade.
Skilj mellan kalenderdatum, tidpunkter, tidsförskjutningar och namngivna tidszoner
Innan du flyttar publiceringsdagen till ett annat verktyg tar du reda på vilken typ av värde verktyget förväntar sig. En kalenderetikett och en tidsstämpel besvarar olika frågor.
| Begrepp | Illustrativt värde | Vad det identifierar |
|---|---|---|
| Kalenderdatum | 2027-06-18 |
En kalenderdag utan klockslag |
| Tidpunkt | 2027-06-18T10:00:00Z |
En punkt på tidslinjen |
| Numerisk UTC-förskjutning | +02:00 |
Skillnaden mellan lokal tid och UTC |
| Namngiven tidszon | Europe/Paris |
En zon vars regler avgör vilka tidsförskjutningar som gäller |
RFC 3339 definierar tidsstämpelformat för tidpunkter, inklusive numeriska tidsförskjutningar och UTC-beteckningen Z. Standarden avgränsar uttryckligen intervallbeskrivningar från sitt tillämpningsområde. Ett par RFC 3339-tidsstämplar kräver därför fortfarande en separat överenskommelse om slutpunkten ingår. RFC 3339, tillämpningsområde och datum-/tidsformat.
Exempelvis identifierar de fiktiva tidsstämplarna 2027-06-18T12:00:00+02:00 och 2027-06-18T10:00:00Z samma tidpunkt. Ingen av dem uttrycker en hel publiceringsdag. När du lägger till ett klockslag och en tidsförskjutning till ett datum ändrar du vilken information du registrerar. RFC 3339, lokala tidsförskjutningar.
En namngiven tidszon tillhandahåller regler för att beräkna lokal tid och den tidsförskjutning som gäller. IANA underhåller dessa regler, inklusive ändringar av tidsförskjutningar och sommartidsregler. Operativsystem och programvaruleverantörer distribuerar uppdateringar till användarna. En enda numerisk tidsförskjutning kan inte ersätta den regelsamlingen när gränser ska beräknas för olika datum. IANA:s tidszoner.
Behåll kalenderdatumet för kalendermarkören. Om en senare uppgift frågar vilka tidsstämplade publiceringar som hör till den dagen väljer du först den namngivna tidszon som definierar publiceringsdagen och beräknar sedan dagens två gränstidpunkter i den zonen.
Hur beräknar en Mac-automatisering samma spann?
Apples Date i Foundation representerar en tidpunkt oberoende av kalender eller tidszon. Namnet kan vara missvisande när indata bara är 18 juni: ett kalenderdatum behöver ett kalendersammanhang innan det kan identifiera en tidpunkt. Apple rekommenderar att du använder Calendar för kalenderberäkningar. Date.
Ange kalendersystem och tidszon uttryckligen i en automatisering. Foundation exponerar kalenderns tidszon via den skrivbara egenskapen timeZone. När du gör det valet uttryckligt blir den avsedda definitionen av publiceringsdagen synlig för den som underhåller automatiseringen. Calendar.timeZone.
Med en tidpunkt som man vet infaller under den avsedda dagen hämtar Calendar.dateInterval(of: .day, for:) starttid och varaktighet för den kalenderkomponenten. Metoden returnerar ett valfritt resultat; en automatisering måste hantera fel i stället för att tyst ersätta datumet med ett annat. dateInterval(of:for:).
Det finns en viktig detalj om slutpunkten: Apple beskriver DateInterval som ett slutet intervall där båda ändpunkterna ingår. Om du vill implementera en exklusiv gräns för publiceringsdagen använder du de beräknade gränserna med en uttrycklig jämförelse: start <= instant && instant < end. Det här är regeln för tillhörighet, inte ett komplett program. DateInterval.
Utgå inte från att varje lokal dag börjar vid en vanlig midnatt. Apples startOfDay(for:) returnerar dagens första existerande ögonblick: den väljer den första midnatten om det finns två, och det första existerande ögonblicket om midnatt saknas. Kalenderbaserade gränser bevarar den skillnaden. startOfDay(for:).
Kontrollera gränsen innan du använder datumet igen
För ett tidsstämpelbaserat arbetsflöde använder du den här kontrollen med tre punkter för det beräknade spannet. De förväntade resultaten följer direkt av den uttryckliga jämförelsen med den exklusiva slutgränsen.
| Testtidpunkt | Förväntad tillhörighet |
|---|---|
| Exakt vid dagens början | Inkluderad |
| En tidpunkt strikt mellan gränserna | Inkluderad |
| Exakt vid nästa dags början | Exkluderad |
Kontrollen förklarar också varför en påhittad sluttid som 23:59:59 är onödig. Om indata innehåller bråkdelar av sekunder kan ett värde som är senare än den valda bryttiden fortfarande infalla före gränsen vid nästa dag. Genom att jämföra med den exklusiva gränsen slipper du välja en tidsstämpelsprecision för ”det sista ögonblicket”.
För uppgiften på Mac-datorn avslutar du med att kontrollera att Exempel på publiceringsdag endast täcker 18 juni och att datumrepresentationen i exporten stämmer med det. Om dagen senare blir ett tidsstämpelfilter behåller du det valda kalender- och tidszonssammanhanget, inkluderar början och exkluderar gränsen vid nästa dag.
Källor
Ställa in heldags-, flerdagars- eller upprepade händelser i Kalender på Mac — Apple.
RFC 5545: Grundspecifikation för kalender- och schemaläggningsobjekt på internet (iCalendar) — RFC Editor.
RFC 3339: Datum och tid på internet: tidsstämplar — RFC Editor.
Tidszoner — IANA.
Date — Apples utvecklardokumentation.
timeZone — Apples utvecklardokumentation.
dateInterval(of:for:) — Apples utvecklardokumentation.
DateInterval — Apples utvecklardokumentation.
startOfDay(for:) — Apples utvecklardokumentation.