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.

  1. Öppna Kalender och gå till 18 juni 2027.
  2. Välj Dag eller Vecka högst upp i fönstret.
  3. Dubbelklicka i området all-day ovanför timrutnätet för 18 juni.
  4. Ge händelsen den neutrala titeln Exempel på publiceringsdag.
  5. 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