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ù :JJ
désigne le jour (de 00 à 31),MM
dé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ù :hh
est le nombre d’heures complètes écoulées depuis le dernier jour complet (de 00 à 23)mm
est 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ù :
AAAA
donne la valeur de l’année (de 0000 à 9999),MM
donne le mois (de 00 à 12),DD
le jour (de 00 à 31),hh
l’heure (de 00 à 23),mm
les minutes (de 00 à 59)ss
les 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ù :
hh
est le nombre d’heures complètes écoulées entre ledebut
et lafin
(de 00 à 23),mm
est 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.awk
Recopiez 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
SAE15
où 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_ics1
la partie correspondant à la date (ici"20211031"
) et celle correspondant à l’heure (ici"080000"
) en les rangeant dans 2 variablesdate1
etheure1
.Dans
date1
extrayez uniquement la valeur de l’année, puis la valeur du mois.Vous êtes prêt à coder les fonctions attendues sur les dates.