Ja fa sis anys que sóc desenvolupador professional. Durant aquests sis anys mai he treballat per a una empresa ni en cap projecte que no lluiti amb problemes de data i hora d’alguna forma.



Gairebé totes les aplicacions en què treballareu requereixen l’ús del temps d’alguna manera, és a dir, que en algun moment haureu de recollir, emmagatzemar, recuperar i mostrar dates o hores. No hi ha cap bala de plata per tractar les dates ni les hores i mai no podeu escapar de la complexitat inherent que comporta el nostre concepte de temps, però hi ha passos que podeu fer per fer-ho menys dolorós.



Durant els anys que he estat treballant amb el temps en diferents llenguatges de programació, he trobat que el coneixement següent és molt llarg.

Selecció del format de dades adequat

El primer pas per treballar amb dates i hores és triar una representació per a les vostres dades. Tot i que diferents formats poden semblar més o menys iguals, el format que trieu tindrà un gran impacte en la forma d’escriure i depurar el vostre codi.

Utilitzar una marca de temps numèrica quan necessiteu una data significarà analitzar la marca de temps de data i recuperar-ne la data, que pot ser o no directa segons la zona horària.


9999 números d'àngel

Utilitzar una cadena personalitzada per representar un període de temps sembla fàcil d’emmagatzemar i manipular, però és difícil de consultar. A més, l’ús de qualsevol tipus de representació que l’ull humà no reconegui immediatament dificultarà la depuració del vostre codi.

En triar un format per a dates o hores, compleixo les regles següents:



  1. Mai utilitzeu marques de temps numèriques. Sovint són les més fàcils d’obtenir per biblioteques estàndard entre diversos llenguatges de programació, però no són llegibles per l’home i la temptació de manipular-les és massa forta.
  2. Complir ISO 8601 , un estàndard que defineix un format de dades relacionades amb la data i l’hora. És trivial trobar una biblioteca per a qualsevol idioma que pugui gestionar les variacions de la norma ISO 8601.
  3. La norma ISO 8601 és un estàndard, però té moltes variacions. Sempre haureu de triar la variant més llegible de l'ISO 8601. Això no requereix cap esforç addicional, però facilita la depuració.
  4. La vostra cadena de marca de temps només ha de contenir dades que necessiteu absolutament. Quan treballeu amb horaris, la vostra cadena no hauria de contenir una data i quan treballeu amb una data que sigui agnòstica de zona horària, la vostra cadena no hauria de contenir una zona horària. Afegir informació addicional afegeix ambigüitat a l’operació d’anàlisi i a la intenció de les dades per als futurs desenvolupadors
  5. Quan emmagatzemeu zones horàries, sempre es normalitza a la mateixa zona horària a les vostres marques horàries. Això no només facilita la classificació i el processament de les dades per a un ordinador, sinó que també ho facilita a un desenvolupador humà.

Complir aquestes regles no us costarà molt per endavant, però us facilitaran la vida quan s’estableixi la vostra sol·licitud i trobeu que el vostre ús d’horaris i dates no és el que esperàveu.

Triar l'eina adequada

Com passa amb la majoria de problemes de la nostra indústria, el tractament de l’hora i la data es redueix a escollir l’eina adequada per al treball.

És temptador utilitzar les eines de la biblioteca estàndard del vostre idioma preferit, però és possible que aquesta no sigui la millor opció. Tot i que algunes biblioteques estàndard tenen funcions de data i hora fantàstiques (Python), d’altres són francament lamentables (Javascript). L'ús d'una eina incorrecta fa que sigui molt més difícil desenvolupar funcions basades en el temps i que facilita la inserció d'errors a la vostra aplicació.



Una bona biblioteca per gestionar dates i hores us permetrà seguir les 5 regles esmentades anteriorment. En concret, hauria de ser capaç de:

  • Analitzeu qualsevol representació de data que pugueu trobar (incloses les representacions externes).
  • Sortida a qualsevol representació de data que pugueu necessitar (incloses les representacions externes).
  • Manipuleu dates i hores afegint o restant unitats de temps d’elles.
  • Compareu dates i hores.
  • Converteix correctament entre zones horàries.

És important que la vostra biblioteca admeti aquestes funcions, en cas contrari la temptació d’intentar implementar la funcionalitat vosaltres mateixos serà massa elevada. I per tenir-ho clar, si intenteu implementar alguna d'aquestes funcionalitats vosaltres mateixos, fracassareu.

No analitzeu les vostres pròpies marques de temps amb expressions regulars, no afegiu segons a una marca de temps numèrica perquè sembla un número normal i no compareu dates i hores amb l’operador d’igualtat. Aquestes biblioteques existeixen perquè aquests problemes són difícils de resoldre i reinventar la roda a la vostra aplicació només us deixarà la roda trencada.

A continuació, tinc alguns suggeriments per a biblioteques que compleixen aquests criteris:

Llenguatge Biblioteca
Python Biblioteca estàndard
Javascript Moment i Fus horari moment
Java 8 i versions posteriors Biblioteca estàndard (java.time)
Java 7 i versions posteriors Joda-Time
Ràpid Data Swift

Si el vostre idioma no apareix a la llista (perquè no el conec prou), cerqueu la biblioteca de dates i hores. El més probable és que trobeu una bona biblioteca que farà tot el que necessiteu.

Saber del temps

L’últim coneixement que he de compartir no és específic per treballar amb dates i hores, sinó que és més aviat una filosofia general que ens ajuda a evitar problemes i s’aplica tant a la gestió de la data i l’hora com a la resta de problemes de programació. .

Comproveu sempre els vostres supòsits.

Abordem tots els problemes presentats amb un ampli conjunt de coneixements i un conjunt encara més gran de suposicions. A l’hora de gestionar les dates i les hores, és més important que mai comprovar els vostres supòsits per assegurar-vos que encara s’adapten al vostre escenari.

Aquesta llista , titulat Falsehoods Programmers Believe About Time, ofereix molts exemples excel·lents que il·lustren el temps probablement no és el que pensàveu. Quan dissenyeu o desenvolupeu una característica centrada en el temps, us animo a agafar un soci i passar per aquesta llista assegurant-vos que heu evitat les trampes que apareixen a la llista.

Els errors de temps són notòriament difícils de capturar i encara són més difícils de provar. Si es desenvolupa tenint en compte aquesta llista, és possible que pugueu evitar subtils errors que afectin els vostres clients però que no puguin atrapar (el pitjor tipus d’error).

Zones horàries

No es completaria cap discussió sobre les hores ni les dates sense esmentar els fusos horaris. A més de familiaritzar-se amb les falsedats habituals enumerades anteriorment, també familiaritzeu-vos amb els conceptes bàsics dels fusos horaris.

Els fusos horaris seran constantment un punt dolorós quan es treballa amb el temps, fins i tot si es creu que els té 'tot esbrinat'. Tenir una mica de coneixement sobre els fusos horaris us ajudarà a centrar el vostre pensament i us assegurarà que no cometeu cap error lògic en manipular els temps.

Malauradament, no hi ha manera d’evitar completament la dificultat d’emmagatzemar i manipular horaris i dates en programar. Però si seguiu aquests passos i treballeu tenint en compte aquest coneixement, podeu fer la tasca més senzilla reduint la quantitat de codi que heu d’escriure i obligant-vos a paradigmes menys propensos a causar problemes.

Comparteix Amb Els Teus Amics: