Le concept de « temps » a ceci de paradoxal qu’il est à la fois très intuitif (tout le monde sait ce qu’est le temps) et extrêmement complexe dans ses implications et ses représentations1.
C’est particulièrement vrai en informatique, où l’on a beaucoup d’outils pour manier les informations temporelles dans toute leur subtilité. Mais ces moyens sont souvent mal utilisés, soit parce que mal compris, soit parce que les notions qu’ils font intervenir sont mal comprises, parfois par les concepteurs des langages ou des bibliothèques. Or, une méconnaissance, un emploi du mauvais outil peuvent mener à des erreurs complexes, rares, délicates à trouver et à corriger, et aux conséquences démesurées – imaginez un système de paie qui ne se lance pas, par exemple.
Le but de ce tutoriel est de faire le point sur la gestion de la temporalité en informatique : réviser et clarifier les concepts de date, durée et horloge, et voir comment manipuler ces concepts en informatique.
Ce contenu n’a aucun prérequis particulier. Même si vous ne programmez pas, il pourrait vous servir pour votre culture générale.
Les exemples seront en Java « récent » (8 ou plus), mais les concepts sont applicables à tous les langages. Les différents outils utilisables pour chaque langage seront regroupés en annexe. N’hésitez pas à indiquer ceux qui concernent votre langage préféré en commentaire, que je puisse le rajouter à la liste !
Les trois parties principales devraient se lire dans l’ordre proposé, car chacune part du principe que la précédente est acquise.
- Par exemple, il n’existe pas de définition du « temps » qui ne soit pas autoréférentielle, c’est-à-dire où la notion de temps est absente.↩
Les dates et heures
- Les 3 (trois ?!) types de dates
- Digression sur les calendriers
- Précision d’une date et dates partielles
- Usage des dates et heures en informatique
Les durées
- Une durée n’est pas une date (ça parait évident, mais ça va mieux en le disant)
- Le grand bazar des unités de durée
- Usage des durées en informatique
Les horloges
- « Les » horloges ?
- L’horloge légale
- L’horloge monotone
- Le cas particulier des planifications
- La gestion des horloges en informatique
Annexes
- Afficher et faire saisir des dates : considérations sur l’expérience utilisateur
- Ressources par langages de progammation
Une fois ce tutoriel terminé, vous devriez maitriser les notions suivantes :
- Les trois types de « date » (instant, date indépendante de l’utilisateur et date dépendante de l’utilisateur), les concepts de calendrier et de précision des dates, et les subtilités de leur gestion en informatique : ce qu’est un timestamp, les outils de manipulation des dates (dont la différence avec une chaine de caractères et le formatage), l’existence de la norme ISO 8601.
- Ce qu’est une durée (et sa différence avec une date), les systèmes d’unités employés pour les mesurer et les écueils associés (en particulier les unités dont la taille est variable selon le contexte), et les difficultés de leur usage en informatique – notamment les pièges qui consistent à mélanger durées et dates, et à faire manuellement de l’arithmétique trop simpliste. Et encore une fois la norme ISO 8601.
- La distinction entre une horloge légale et une horloge monotone (qui est en fait un chronomètre), dans quel cas utiliser chacune d’elle et comment les exploiter en informatique – surtout dans le cas d’une planification.
Merci à @Renault, @QuentinC, @Aabu, @entwanne et @ToxicScorpius pour leurs retours en bêta-lecture, et à @entwanne pour la validation !
Icône d’après CC BY-SA 4.0 Micthev