Rappresenta un’intera giornata includendone l’inizio ed escludendo l’inizio del giorno successivo. Per un contrassegno di pubblicazione in Calendario su Mac, crea un evento di un’intera giornata; nei dati iCalendar, una data di fine esplicita identifica il primo giorno escluso dall’evento.
Questa guida usa una data di pubblicazione fittizia: 18 giugno 2027. L’obiettivo è inserire un’intera giornata di pubblicazione nel calendario del Mac, esportarla e verificarne i limiti. Lo stesso ragionamento aiuta a riconoscere gli errori quando una data passa da un calendario a un foglio di calcolo e a un’automazione.
Che cosa significa un limite esclusivo al giorno successivo?
Per la giornata di pubblicazione fittizia, la data inclusa è il 18 giugno. Il 19 giugno è la prima data esclusa. Scritta come intervallo semiaperto, la porzione è [2027-06-18, 2027-06-19): la parentesi quadra include l’inizio e quella tonda esclude la fine.
Lo standard iCalendar rende inclusiva la proprietà DTSTART di un evento e non inclusiva la proprietà DTEND. Un evento di un’intera giornata usa valori di tipo data per entrambe. Quindi, una data di fine al giorno successivo descrive un’intera giornata. I valori di sola data non devono contenere un parametro TZID. RFC 5545, componenti dell’evento e identificatori del fuso orario.
Questo frammento esemplificativo mostra solo le due proprietà che definiscono i limiti, non un file di calendario completo e importabile:
DTSTART;VALUE=DATE:20270618
DTEND;VALUE=DATE:20270619
La tabella decisionale seguente applica questa regola a orari di pubblicazione fittizi. Leggi l’ultima colonna come la prima data esclusa, non come un altro giorno di pubblicazione.
| Copertura prevista | Data iniziale inclusa | Data finale esclusiva |
|---|---|---|
| Solo il 18 giugno | 18 giugno 2027 | 19 giugno 2027 |
| Dal 18 al 20 giugno inclusi | 18 giugno 2027 | 21 giugno 2027 |
| Solo il 30 giugno | 30 giugno 2027 | 1 luglio 2027 |
Crea la giornata di pubblicazione in Calendario su Mac
Per iniziare, usa un calendario in cui puoi creare eventi. Per questa operazione servono i controlli di Calendario per gli eventi di un’intera giornata; non occorrono strumenti di programmazione.
- Apri Calendario e vai al 18 giugno 2027.
- Seleziona
GiornooSettimananella parte superiore della finestra. - Fai doppio clic sull’area
all-daysopra la griglia oraria del 18 giugno. - Assegna all’evento il titolo neutro
Sample publication day. - Controlla che il contrassegno occupi solo il 18 giugno.
Apple documenta il doppio clic sull’area degli eventi di un’intera giornata nella vista Giorno o Settimana come metodo per creare un evento di un’intera giornata. Documenta separatamente il trascinamento sulle date per creare un evento di più giorni. Per questo esempio, usa l’azione relativa a un solo giorno. Configurare eventi di un’intera giornata, di più giorni o ripetuti in Calendario su Mac.
Considera il calendario visibile come prima verifica: il contrassegno deve coprire la data prevista, senza estendersi al 19 giugno. Il limite esclusivo descrive il modo in cui l’intervallo viene rappresentato nei dati. Non indica di estendere il contrassegno visibile a un altro giorno.
Esporta l’evento e controlla i limiti delle date
Seleziona il calendario dell’evento nell’elenco dei calendari, quindi scegli File > Esporta > Esporta. Salva il file .ics risultante in una posizione comoda. Questa operazione esporta gli eventi del calendario selezionato, quindi se un calendario contiene più eventi, il file includerà più record. Apple documenta .ics come formato per questa esportazione. Importare o esportare calendari su Mac.
Nel Finder, seleziona il file esportato e usa File > Apri con per aprirlo con un editor di testo, come TextEdit. Apple documenta questa procedura per scegliere un’applicazione con cui aprire un singolo file. Scegliere un’app per aprire un file su Mac.
Trova Sample publication day, quindi esamina il record dell’evento che lo circonda. Confronta le proprietà di inizio e fine con il frammento esemplificativo sopra. È normale trovare altre proprietà; concentrati sui valori delle date e sui relativi tipi.
Se un evento di un’intera giornata non contiene né DTEND né DURATION, lo standard gli assegna una durata di un giorno. L’assenza di una data di fine esplicita, quindi, non indica automaticamente un problema. RFC 5545, componenti dell’evento.
Usa l’esportazione come copia diagnostica. Se l’evento visibile copre date errate, correggilo in Calendario ed esportalo di nuovo. Così la verifica resta collegata all’evento che hai effettivamente creato.
Distingui date civili, istanti, scarti e fusi orari con nome
Prima di trasferire la giornata di pubblicazione in un altro strumento, individua il tipo di valore richiesto. Un’etichetta del calendario e un timestamp rispondono a domande diverse.
| Concetto | Valore esemplificativo | Che cosa identifica |
|---|---|---|
| Data civile | 2027-06-18 |
Un giorno di calendario senza orario |
| Istante | 2027-06-18T10:00:00Z |
Un punto preciso sulla linea temporale |
| Scarto numerico da UTC | +02:00 |
La differenza tra l’ora locale e UTC |
| Fuso orario con nome | Europe/Paris |
Un fuso le cui regole determinano gli scarti applicabili |
RFC 3339 definisce rappresentazioni degli timestamp per gli istanti, inclusi gli scarti numerici e il designatore UTC Z. Esclude esplicitamente dal proprio ambito la descrizione degli intervalli. Una coppia di timestamp RFC 3339 richiede comunque un accordo separato per stabilire se l’estremo è incluso. RFC 3339, ambito e formato di data e ora.
Per esempio, i timestamp fittizi 2027-06-18T12:00:00+02:00 e 2027-06-18T10:00:00Z identificano lo stesso istante. Nessuno dei due rappresenta un’intera giornata di pubblicazione. Aggiungere un orario e uno scarto a una data cambia le informazioni registrate. RFC 3339, scarti locali.
Un fuso con nome fornisce le regole per calcolare l’ora locale e lo scarto applicabile. IANA gestisce queste regole, incluse le variazioni degli scarti e il comportamento dell’ora legale; i fornitori di sistemi operativi e software distribuiscono gli aggiornamenti agli utenti. Un singolo scarto numerico non può sostituire questo insieme di regole quando si calcolano i limiti in date diverse. Fusi orari IANA.
Per il contrassegno nel calendario, mantieni la data civile. Se un’attività successiva richiede di stabilire quali pubblicazioni con timestamp appartengono a quel giorno, scegli prima il fuso con nome che definisce la giornata di pubblicazione, quindi calcola in quel fuso i due istanti che ne delimitano i confini.
Come dovrebbe calcolare la stessa porzione un’automazione su Mac?
La classe Date di Foundation rappresenta un istante indipendentemente dal calendario o dal fuso orario. Il suo nome può trarre in inganno se l’input è semplicemente il 18 giugno: una data civile richiede il contesto del calendario prima di poter identificare un istante. Apple consiglia di usare Calendar per i calcoli di calendario. Date.
Per un’automazione, specifica il sistema di calendario e il fuso. Foundation espone il fuso di un calendario tramite la proprietà scrivibile timeZone. Rendere esplicita questa scelta permette a chiunque si occupi della manutenzione dell’automazione di capire quale definizione della giornata di pubblicazione viene usata. Calendar.timeZone.
Dato un istante che ricade sicuramente nel giorno previsto, Calendar.dateInterval(of: .day, for:) restituisce l’ora iniziale e la durata di quel componente del calendario. Il metodo restituisce un risultato facoltativo; l’automazione deve gestire un eventuale errore anziché sostituire silenziosamente la data con un’altra. dateInterval(of:for:).
C’è un dettaglio importante sugli estremi: Apple documenta DateInterval come un intervallo chiuso, che include entrambi gli estremi. Per implementare il limite esclusivo della giornata di pubblicazione, usa i limiti calcolati con un confronto esplicito: start <= instant && instant < end. Questa è la regola di appartenenza, non un programma completo. DateInterval.
Evita di presumere che ogni giorno locale inizi a una normale mezzanotte. Il metodo startOfDay(for:) di Apple restituisce il primo istante esistente del giorno: sceglie la prima mezzanotte se ce ne sono due e il primo istante esistente se la mezzanotte non c’è. I limiti derivati dal calendario mantengono questa distinzione. startOfDay(for:).
Verifica il limite prima di riutilizzare la data
Per un flusso di lavoro basato sui timestamp, applica questa verifica di accettazione in tre punti all’intervallo calcolato. I risultati previsti derivano direttamente dal confronto esplicito con l’estremo finale esclusivo.
| Istante di prova | Appartenenza prevista |
|---|---|
| Esattamente all’inizio del giorno | Incluso |
| Qualsiasi istante strettamente compreso tra i limiti | Incluso |
| Esattamente all’inizio del giorno successivo | Escluso |
Questa verifica spiega anche perché non serve inventare un orario finale come 23:59:59. Se un input contiene frazioni di secondo, un valore successivo a quella soglia scelta può comunque precedere il limite del giorno successivo. Il confronto con il limite esclusivo evita di dover scegliere la precisione del timestamp per «l’ultimo istante».
Per l’attività sul Mac, concludi verificando che Sample publication day occupi solo il 18 giugno e che la rappresentazione della data esportata corrisponda a tale copertura. Se in seguito il giorno diventa un filtro per timestamp, mantieni il calendario e il fuso scelti, includi l’inizio ed escludi il limite del giorno successivo.
Fonti
Configurare eventi di un’intera giornata, di più giorni o ripetuti in Calendario su Mac — Apple.
RFC 5545: specifica degli oggetti principali per la calendaring e la programmazione su Internet (iCalendar) — RFC Editor.
RFC 3339: data e ora su Internet: timestamp — RFC Editor.
Fusi orari — IANA.
Date — Documentazione per sviluppatori Apple.
timeZone — Documentazione per sviluppatori Apple.
dateInterval(of:for:) — Documentazione per sviluppatori Apple.
DateInterval — Documentazione per sviluppatori Apple.
startOfDay(for:) — Documentazione per sviluppatori Apple.