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 le debut et la fin (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) :

  1. Créez un nouveau fichier projet_date.awk

  2. 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

}
  1. Ouvrez un terminal.

  2. Placez vous dans le répertoire SAE15 où vous avez normalement créé votre script.

  3. Testez votre script avec la commande :

awk -f ./projet_date.awk
  1. 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 variables date1 et heure1.

  • 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.