Je suis développeur professionnel depuis environ six ans maintenant. Au cours de ces six années, je n’ai jamais travaillé pour une entreprise ou sur un projet qui n’ait pas eu de problèmes de date et d’heure sous une forme ou une autre.





Presque toutes les applications sur lesquelles vous travaillerez nécessitent l'utilisation du temps d'une manière ou d'une autre, ce qui signifie qu'à un moment donné, vous devrez collecter, stocker, récupérer et afficher des dates ou des heures. Il n'y a pas de solution miracle pour gérer les dates ou les heures et vous ne pouvez jamais échapper à la complexité inhérente à notre concept du temps, mais vous pouvez prendre des mesures pour le rendre moins pénible.



Au cours des années où j’ai travaillé avec le temps dans différents langages de programmation, j’ai découvert que les connaissances suivantes sont très utiles.



Choisir le bon format de données

La première étape lorsque vous travaillez avec des heures et des dates est de choisir une représentation pour vos données. Bien que différents formats puissent sembler plus ou moins identiques, le format que vous choisissez aura un impact important sur la façon dont vous écrivez et déboguez votre code.

L'utilisation d'un horodatage numérique lorsque vous avez besoin d'une date signifie analyser l'horodatage de la date et en récupérer la date, ce qui peut ou non être simple en fonction du fuseau horaire.


sens de 51

Utiliser une chaîne personnalisée pour représenter une période de temps semble facile à stocker et à manipuler, mais il est difficile d'interroger. De plus, l'utilisation de tout type de représentation qui n'est pas immédiatement reconnaissable par l'œil humain va rendre le débogage de votre code plus difficile.



Lors du choix d'un format pour les dates ou les heures, je respecte les règles suivantes:



  1. N'utilisez jamais d'horodatages numériques. Ils sont souvent les plus faciles à obtenir par les bibliothèques standard parmi divers langages de programmation, mais ils ne sont pas lisibles par l’homme et la tentation de les manipuler est trop forte.
  2. Respecter ISO 8601 , une norme qui définit un format pour les données relatives à la date et à l'heure. Il est simple de trouver une bibliothèque pour n'importe quel langage capable de gérer les variations d'ISO 8601.
  3. ISO 8601 est une norme, mais elle comporte de nombreuses variantes. Vous devez toujours choisir la variante la plus lisible par l'homme d'ISO 8601. Cela ne nécessite aucun effort supplémentaire mais facilite le débogage.
  4. Votre chaîne d'horodatage ne doit contenir que les données dont vous avez absolument besoin. Lorsque vous travaillez avec des heures, votre chaîne ne doit pas contenir de date et lorsque vous travaillez avec une date indépendante du fuseau horaire, votre chaîne ne doit pas contenir de fuseau horaire. L'ajout d'informations supplémentaires ajoute de l'ambiguïté à l'opération d'analyse et à l'intention des données pour les futurs développeurs
  5. Lors du stockage des fuseaux horaires, normalisez toujours le même fuseau horaire dans vos horodatages. Cela facilite non seulement le tri et le traitement des données par un ordinateur, mais cela facilite également la tâche d'un développeur humain.

Le respect de ces règles ne vous coûtera pas cher au départ, mais elles vous faciliteront la vie lorsque votre application sera créée et que vous constaterez que votre utilisation des heures et des dates n'est pas ce que vous attendiez.

Choisir le bon outil

Comme pour la plupart des problèmes de notre industrie, la gestion de l'heure et de la date se résume à choisir le bon outil pour le travail.



Il est tentant d’utiliser les outils de la bibliothèque standard de votre langue préférée, mais ce n’est peut-être pas le meilleur choix. Alors que certaines bibliothèques standard ont des fonctionnalités de date et d'heure fantastiques (Python), d'autres sont carrément pitoyables (Javascript). L'utilisation du mauvais outil rend encore plus difficile le développement de fonctionnalités basées sur le temps et cela facilite la pénétration de bogues dans votre application.



Une bonne bibliothèque de gestion des dates et des heures vous permettra de suivre les 5 règles mentionnées ci-dessus. Plus précisément, il devrait être capable de:



  • Analysez toute représentation de date que vous pourriez rencontrer (y compris les représentations externes.)
  • Sortie vers n'importe quelle représentation de date dont vous pourriez avoir besoin (y compris des représentations externes.)
  • Manipulez les dates et les heures en y ajoutant ou en soustrayant des unités de temps.
  • Comparez les dates et les heures.
  • Convertissez correctement entre les fuseaux horaires.

Il est important que votre bibliothèque prenne en charge ces fonctionnalités, sinon la tentation d'essayer de mettre en œuvre la fonctionnalité vous-même sera trop élevée. Et pour être clair, si vous essayez d'implémenter vous-même l'une de ces fonctionnalités, vous échouerez.

N'analysez pas vos propres horodatages avec des expressions régulières, n'ajoutez pas de secondes à un horodatage numérique car il semble être un nombre normal et ne comparez pas les dates et les heures à l'aide de l'opérateur d'égalité. Ces bibliothèques existent parce que ces problèmes sont difficiles à résoudre et réinventer la roue dans votre application va juste vous laisser avec une roue cassée.

Ci-dessous, j'ai quelques suggestions de bibliothèques qui répondent à ces critères:

Langue Bibliothèque
Python Bibliothèque standard
Javascript Moment et Fuseau horaire du moment
Java 8 et supérieur Bibliothèque standard (java.time)
Java 7 et inférieur Joda-Time
Rapide SwiftDate

Si votre langue ne figure pas dans la liste (car je ne la connais pas assez bien), recherchez simplement la bibliothèque de dates et d’heures. Il y a de fortes chances que vous trouviez une bonne bibliothèque qui fera tout ce dont vous avez besoin.

Connaître le temps

Les dernières connaissances que j'ai à partager ne sont pas spécifiques au travail avec les dates et les heures, mais plutôt une philosophie générale pour nous aider à éviter les problèmes et s'appliquent à la gestion de la date et de l'heure autant que tout autre problème de programmation. .

Vérifiez toujours vos hypothèses.

Nous abordons chaque problème présenté avec un large corpus de connaissances et un corpus d'hypothèses encore plus large. Lors du traitement des dates et des heures, il est plus important que jamais de vérifier vos hypothèses pour vous assurer qu'elles sont toujours valables pour votre scénario.

Cette liste , intitulé Falsehoods Programmers Believe About Time, donne de nombreux excellents exemples qui illustrent que le temps n'est probablement pas ce que vous pensiez. Lorsque vous concevez ou développez une fonctionnalité centrée sur le temps, je vous encourage à trouver un partenaire et à parcourir cette liste en vous assurant que vous avez évité les pièges répertoriés.

Les bogues de temps sont notoirement difficiles à attraper et encore plus difficiles à tester. Si vous développez avec cette liste à l'esprit, vous pourrez peut-être éviter des bogues subtils qui affecteraient vos clients mais qu'ils pourraient ne pas attraper (le pire type de bogue!)

Fuseaux horaires

Aucune discussion sur les heures ou les dates ne serait complète sans mention des fuseaux horaires. En plus de vous familiariser avec les mensonges courants énumérés ci-dessus, familiarisez-vous également avec les bases des fuseaux horaires.

Les fuseaux horaires seront toujours un point douloureux lorsque vous travaillez avec le temps, même si vous pensez que vous les avez «tous compris». Avoir un peu de connaissances sur les fuseaux horaires vous aidera à centrer votre réflexion et à vous assurer que vous ne faites aucune erreur de logique lors de la manipulation des heures.

Malheureusement, il n'existe aucun moyen d'éviter complètement la difficulté de stocker et de manipuler les heures et les dates lors de la programmation. Mais si vous suivez ces étapes et que vous travaillez avec ces connaissances à l'esprit, vous pouvez faciliter la tâche en réduisant la quantité de code que vous devez écrire et en vous forçant à adopter des paradigmes moins susceptibles de causer des problèmes.

Partage Avec Tes Amis: