Activité 3 : Gestion des dates et des durées (2h)
Représenter une date (jour + heure)
La date (extrait de Wikipédia - Date) est, au sens usuel, une indication de temps visant à définir un jour unique, généralement du calendrier grégorien (calendrier divisé en 12 mois), éventuellement associé à un nom de jour de la semaine (lundi, mardi, mercredi, …). On l’utilise notamment pour repérer, avec l’heure, un événement temporel donné. Il existe plusieurs façons de les représenter dépendantes du pays ou du format de fichiers qui les stockent.
Format des évènements temporels pour le pseudo-csv
Dans le projet, sera utilisé :
Pour représenter la date, le format
JJ-MM-AAAA(format des Pays-Bas) où :JJdésigne le jour (de 00 à 31),MMdésigne le mois (de 01 à 12),AAAA(de 0000 à 9999) désigne l’année.
Pour représenter l’heure, le système horaire sur 24 heures dans lequel une heure est notée sous la forme
hh:mm(format US, sans secondes), où :hhest le nombre d’heures complètes écoulées depuis le dernier jour complet (de 00 à 23)mmest le nombre de minutes complètes écoulées depuis la dernière heure complète (de 00 à 59).
Format des évènements temporels en .ics
Les évènements temporels d’un contenu .ics (rattachés notamment aux identificateurs DTSTART et DTEND que vous verrez par la suite) donnent en même temps la date et l’heure, en utilisant le format AAAAMMDDThhmmssZ où :
AAAAdonne la valeur de l’année (de 0000 à 9999),MMdonne le mois (de 00 à 12),DDle jour (de 00 à 31),hhl’heure (de 00 à 23),mmles minutes (de 00 à 59)ssles secondes (de 00 à 59)
Le caractère "T" (toujours présent) sépare la date de l’heure ; le caractère "Z" (optionnel) donne une indication sur le fuseau horaire.
En reprenant l’exemple de l’activité précédente (cf. Exemple d’événement ics), la date de début de l’événement donnée avec DTSTART:20211126T080000Z indique que l’année AAAA est 2021, le mois MM est 11, le jour JJ est 26 puis (après le T) l’heure hh est 08, les minutes mm sont 00 et les secondes 00. La date obtenue est donc le 26-11-2021 à 08:00.
Dans votre projet, chaque évènement temporel récupéré des contenus .ics doit être converti en une date JJ-MM-AAAA et en une heure hh:mm (rôle des fonctions projetX.conversion_date() et projetX.conversion_heure()).
Représenter une durée
Format des durées temporelles (courtes)
Une durée sépare deux évènements temporels debut et fin (par exemple le début et la fin d’un cours). Chacun (dans ce projet) correspond à une date et une heure sans mention des secondes (format pseudo-csv).
La durée peut s’exprimer sous la forme d’un entier nbre_minutes traduisant le nombre de minutes qui se sont écoulées entre le debut et la fin.
Dans les données pseudo-csv que vous allez générer, la durée d’une séance de cours ne dépassant pas 24h, elle est représentée sous la forme hh:mm où :
hhest le nombre d’heures complètes écoulées entre ledebutet lafin(de 00 à 23),mmest le nombre de minutes complètes écoulées depuis la dernière heure complète (de 00 à 59).
Format des durées en nombre de jours
Lorsque la durée entre deux événements temporels debut et la fin dépasse la journée (par exemple la durée entre 2 TP différents de la SAE15), elle sera arrondie à un nombre de jours, sans prise en compte de l’écart horaire séparant les 2 dates.
Ce nombre peut être calculé avec la fonction tools_date.nombre_jours() fournie ultérieurement.
Stratégie de prise en main
Préparer un script Awk
A la racine du répertoire de votre projet (répertoire ~/SAE15) :
Créez un nouveau fichier
projet_date.awkRecopiez le code suivant : (par un simple copier-coller)
BEGIN { print "Le script commence !" evenement1 = "31-10-2021" evenement2 = "17-01-2022" # Ajoutez votre code après cette ligne, avant l'accolade fermante }
Ouvrez un terminal.
Placez vous dans le répertoire
SAE15où vous avez normalement créé votre script.Testez votre script avec la commande :
awk -f ./projet_date.awk
Vous devriez voir s’écrire « Le script commence ! » sur votre console.
Préparer la conversion ics vers le pseudo-csv
Déclarez deux variables, représentant des événements temporels au format ics (par un simple copier-coller) :
evenement_ics1 = "20211031T080000Z" evenement_ics2 = "20220117T133000Z"
Ecrivez le code pour récupérer dans
evenement_ics1la partie correspondant à la date (ici"20211031") et celle correspondant à l’heure (ici"080000") en les rangeant dans 2 variablesdate1etheure1.Dans
date1extrayez uniquement la valeur de l’année, puis la valeur du mois.Vous êtes prêt à coder les fonctions attendues sur les dates.