Le cauchemar de la manipulation des dates

par PresleyJesus

par PresleyJesus

Depuis la nuit des temps, la gestion des dates est un véritable cauchemar en programmation. La manipulation des valeurs de date est souvent la cause des anomalies et des problèmes sur des systèmes en production.

Le risque est là quand on la manipule en chaîne de caractère (en string). Elle peut avoir n’importe quel format à ce moment-là. Aussi, les paramètres régionaux ou de localisation de l’environnement d’exécution peuvent la faire varier.

Pièges à dates

Voici une série d’endroits où l’on peut se faire prendre au piège avec une valeur de date erronée.

  1. Lecture d’un fichier plat (texte) ou d’un XML avec des dates écrites textuellement
  2. Saisie de date dans un champ texte
  3. Passages de données entre des couches applicatives (ex: un script Javascript envoie une date (format texte) dans un appel AJAX vers le serveur).

Trucs pour réduire les maux de tête

Vous pouvez réduire les ennuis en utilisant au maximum les classes de gestion de date natives au langage de programmation que vous utilisez. Ces fonctionnalités sont disponibles dans tous les langages modernes.

  1. Utilisez des composantes visuelles pour la saisie d’une date (ex. : DatePicker) qui retourne la date dans un format natif valide et insensible au format régional. En PHP, vous pouvez utiliser des Frameworks qui peuvent générer des champs de formulaire typés avec des champs date. En prime vous offrez un beau calendrier pour votre utilisateur.
  2. Valider à outrance la date texte avant de la convertir. Incluez dans votre message d’erreur le texte que vous avez tenté de lire (ça l’aide pour le soutien aux utilisateurs). Tout peut arriver!
  3. Dès que vous lisez une date texte, placez-la tout de suite dans une variable typée pour les dates.
  4. Quand vous devez écrire une date en format texte (sortie à l’écran, écriture dans un fichier), évitez d’utiliser les formats prédéfinis par les paramètres régionaux (ex.: short date).

Est-ce que les dates vous ont déjà hanté dans vos projets?

Un petit truc pour mieux programmer selon les spécifications

Lorsqu’on travaille en mode waterfall et on est dans le siège du programmeur qui doit réaliser ce qui est rédigé dans le dossier fonctionnel, on fait de notre mieux de le lire et de le comprendre. Toutefois, la programmation objet étant ce qu’elle est, on finit par sauter d’une section à l’autre dans le dossier fonctionnel au risque d’omettre un détail ou une règle d’affaire.

Un truc que j’ai adopté au fils des ans c’est de coller du texte du dossier fonctionnel comme commentaire aux endroits prévus. Je m’explique, si le dossier fait référence à une dynamique lorsqu’on quitte un champ texte, ajoutez la description de la règle d’affaire du dossier comme commentaire dans l’événement LostFocus du champ avec une petite mention TODO (à faire plus tard). Ceci vous assure plusieurs choses:

  1. Vous n’allez pas l’oublier de coder la règle.
  2. Vous allez programmer exactement ce qui a été demandé.
  3. Vous allez avoir des commentaires dans votre code sans trop d’efforts.
  4. Vous établissez un lien de traçabilité avec le dossier fonctionnel. Si il existe un code quelconque de la règle d’affaire incluez là sans hésitation!

Pour aider la tâche du programmeur, j’avais découvert un petit Add-In pour Visual Studio et que j’utilise depuis longtemps. Il s’agit de Smart Paster qui permet de coller une chaîne de caractère comme un commentaire, une String ou un StringBuilder.

Si le texte que vous tentez de coller est trop long, il va le couper à 100 caractères (valeur par défaut) et copier la suite sur autant de lignes que nécessaire. Fini les oublis!