Représentez une journée complète en incluant son début et en excluant le début du jour suivant. Pour marquer une publication dans Calendrier sur Mac, créez un événement sur une journée entière ; dans les données iCalendar, une date de fin explicite désigne le premier jour qui ne fait pas partie de l’événement.

Ce guide utilise une date de publication fictive : le 18 juin 2027. L’objectif est d’ajouter une journée complète de publication à votre calendrier Mac, de l’exporter et de vérifier ses bornes. Le même raisonnement vous aidera à repérer les erreurs lorsqu’une date passe d’un calendrier à un tableur, puis à une automatisation.

Que signifie une borne exclusive le lendemain ?

Pour cette journée de publication fictive, la date incluse est le 18 juin. Le 19 juin est la première date exclue. Sous forme d’intervalle semi-ouvert, la plage est [2027-06-18, 2027-06-19) : le crochet inclut le début et la parenthèse exclut la fin.

La norme iCalendar définit le DTSTART d’un événement comme inclusif et son DTEND comme non inclusif. Un événement sur une journée entière utilise des valeurs de date pour les deux. Une date de fin le lendemain décrit donc une journée complète. Les valeurs de date seules ne doivent pas comporter de paramètre TZID. RFC 5545, composants d’événement et identifiants de fuseau horaire.

Cet extrait illustratif montre uniquement les deux propriétés de borne, et non un fichier de calendrier complet pouvant être importé :

DTSTART;VALUE=DATE:20270618
DTEND;VALUE=DATE:20270619

Le tableau de décision suivant applique cette règle à des calendriers de publication fictifs. Lisez la dernière colonne comme la première date exclue, et non comme une autre journée de publication.

Période visée Date de début incluse Date de fin exclusive
Le 18 juin seulement 18 juin 2027 19 juin 2027
Du 18 au 20 juin inclus 18 juin 2027 21 juin 2027
Le 30 juin seulement 30 juin 2027 1er juillet 2027

Ajouter la journée de publication dans Calendrier sur Mac

Commencez par choisir un calendrier dans lequel vous pouvez créer des événements. Pour cette tâche, vous aurez besoin des commandes de Calendrier permettant de créer un événement sur une journée entière ; aucun outil de programmation n’est nécessaire.

  1. Ouvrez Calendrier et accédez au 18 juin 2027.
  2. Sélectionnez Jour ou Semaine en haut de la fenêtre.
  3. Double-cliquez sur la zone all-day au-dessus de la grille horaire du 18 juin.
  4. Donnez à l’événement le titre neutre Journée de publication d’exemple.
  5. Vérifiez que le marqueur couvre uniquement le 18 juin.

Apple indique que la création d’un événement sur une journée entière se fait en double-cliquant sur la zone correspondante en présentation Jour ou Semaine. Apple décrit séparément le glissement sur plusieurs dates pour créer un événement de plusieurs jours. Pour cet exemple, utilisez l’action qui ne crée qu’une seule journée. Configurer des événements sur une journée entière, de plusieurs jours ou récurrents dans Calendrier sur Mac.

Considérez le calendrier affiché comme votre première vérification : le marqueur doit couvrir la date prévue, sans se prolonger jusqu’au 19 juin. La borne exclusive décrit la représentation de la plage dans les données. Elle ne signifie pas que le marqueur visible doit s’étendre sur un jour de plus.

Exporter l’événement et vérifier ses bornes de date

Sélectionnez le calendrier de l’événement dans la liste des calendriers, puis choisissez Fichier > Exporter > Exporter. Enregistrez le fichier .ics obtenu dans un emplacement pratique. Cette opération exporte les événements du calendrier sélectionné ; si celui-ci contient plusieurs événements, le fichier contiendra plusieurs enregistrements. Apple indique que .ics est le format utilisé pour cet export. Importer ou exporter des calendriers sur Mac.

Dans le Finder, sélectionnez le fichier exporté, puis utilisez Fichier > Ouvrir avec pour l’ouvrir dans un éditeur de texte comme TextEdit. Apple indique que cette méthode permet de choisir l’application à utiliser pour ouvrir un fichier. Choisir une app pour ouvrir un fichier sur Mac.

Recherchez Journée de publication d’exemple, puis examinez l’enregistrement d’événement qui l’entoure. Comparez ses propriétés de début et de fin avec l’extrait illustratif ci-dessus. D’autres propriétés sont attendues ; concentrez-vous sur les valeurs de date et leurs types.

Si un événement sur une journée entière ne comporte ni DTEND ni DURATION, la norme lui attribue une durée d’un jour. L’absence de date de fin explicite n’indique donc pas automatiquement un problème. RFC 5545, composants d’événement.

Utilisez l’export comme copie de diagnostic. Si l’événement visible couvre les mauvaises dates, corrigez-le dans Calendrier et exportez-le de nouveau. Votre vérification portera ainsi sur l’événement que vous avez réellement créé.

Distinguer les dates civiles, les instants, les décalages et les fuseaux horaires nommés

Avant de transférer la journée de publication vers un autre outil, déterminez le type de valeur attendu par cet outil. Une date affichée dans un calendrier et un horodatage répondent à des questions différentes.

Concept Valeur illustrative Ce qu’elle désigne
Date civile 2027-06-18 Un jour du calendrier, sans heure
Instant 2027-06-18T10:00:00Z Un point précis sur la ligne du temps
Décalage numérique par rapport à UTC +02:00 La différence entre l’heure locale et UTC
Fuseau horaire nommé Europe/Paris Un fuseau dont les règles déterminent les décalages applicables

La RFC 3339 définit les représentations des horodatages d’instants, notamment les décalages numériques et le symbole UTC Z. Elle exclut explicitement de son champ d’application la description des intervalles. Une paire d’horodatages RFC 3339 nécessite donc toujours un accord distinct précisant si la borne finale est incluse. RFC 3339, champ d’application et format date/heure.

Par exemple, les horodatages fictifs 2027-06-18T12:00:00+02:00 et 2027-06-18T10:00:00Z désignent le même instant. Aucun des deux ne représente une journée complète de publication. Ajouter une heure et un décalage à une date modifie les informations que vous consignez. RFC 3339, décalages locaux.

Un fuseau nommé fournit les règles de calcul de l’heure locale et du décalage applicable. L’IANA tient ces règles à jour, y compris les changements de décalage et les règles relatives à l’heure d’été ; les fournisseurs de systèmes d’exploitation et de logiciels distribuent les mises à jour aux utilisateurs. Pour calculer les bornes de dates différentes, un simple décalage numérique ne peut pas remplacer cet ensemble de règles. Fuseaux horaires de l’IANA.

Pour le marqueur dans le calendrier, conservez la date civile. Si une tâche ultérieure demande quelles publications horodatées appartiennent à cette journée, choisissez d’abord le fuseau nommé qui définit la journée de publication, puis calculez dans ce fuseau les deux instants qui en marquent les bornes.

Comment une automatisation Mac peut-elle calculer la même plage ?

La classe Date de Foundation représente un instant indépendamment d’un calendrier ou d’un fuseau horaire. Son nom peut prêter à confusion si votre donnée d’entrée est simplement le 18 juin : une date civile doit être associée à un calendrier pour pouvoir désigner un instant. Apple recommande d’utiliser Calendar pour les calculs calendaires. Date.

Pour une automatisation, définissez explicitement le système calendaire et le fuseau horaire. Foundation expose le fuseau du calendrier au moyen de sa propriété modifiable timeZone. En gardant ce choix explicite, vous indiquez clairement à la personne chargée de la maintenance comment définir la journée de publication. Calendar.timeZone.

À partir d’un instant dont on sait qu’il se situe dans la journée visée, Calendar.dateInterval(of: .day, for:) renvoie l’heure de début et la durée de la composante de calendrier concernée. Cette méthode renvoie un résultat facultatif ; une automatisation doit gérer l’échec au lieu de lui substituer silencieusement une autre date. dateInterval(of:for:).

La borne finale présente un détail important : Apple définit DateInterval comme un intervalle fermé, qui inclut ses deux bornes. Pour appliquer une borne exclusive à la journée de publication, utilisez les bornes calculées avec une comparaison explicite : start <= instant && instant < end. Il s’agit de la règle d’appartenance, et non d’un programme complet. DateInterval.

Ne partez pas du principe que chaque journée locale commence à minuit. La méthode startOfDay(for:) d’Apple renvoie le premier instant existant du jour : si minuit se produit deux fois, elle choisit le premier ; si minuit n’existe pas, elle choisit le premier instant existant. Les bornes calculées par le calendrier respectent cette distinction. startOfDay(for:).

Vérifier la borne avant de réutiliser la date

Pour un processus fondé sur des horodatages, appliquez ce contrôle en trois points à la plage calculée. Les résultats attendus découlent directement de la comparaison explicite avec la borne finale exclusive.

Instant testé Appartenance attendue
Exactement au début du jour Inclus
À tout instant strictement entre les bornes Inclus
Exactement au début du jour suivant Exclu

Ce contrôle explique également pourquoi il est inutile d’inventer une heure finale comme 23:59:59. Si une entrée contient des fractions de seconde, une valeur postérieure à l’heure limite choisie peut encore précéder la borne du jour suivant. La comparaison avec la borne exclusive évite de devoir choisir une précision d’horodatage pour désigner « le dernier instant ».

Pour cette tâche sur Mac, terminez en vérifiant que Journée de publication d’exemple occupe uniquement le 18 juin et que les dates exportées correspondent à cette couverture. Si la journée devient ensuite un filtre d’horodatages, conservez le calendrier et le fuseau choisis, incluez le début et excluez la borne du jour suivant.

Sources