Soy desarrollador profesional desde hace unos seis años. Durante esos seis años, nunca trabajé para una empresa o en un proyecto que no tuviera problemas con la fecha y la hora de alguna forma.



Casi todas las aplicaciones en las que trabajará requieren el uso de tiempo de alguna manera, lo que significa que en algún momento tendrá que recopilar, almacenar, recuperar y mostrar fechas u horas. No existe una fórmula mágica para lidiar con fechas u horas y nunca puedes escapar de la complejidad inherente que viene con nuestro concepto de tiempo, pero hay pasos que puedes tomar para que sea menos molesto.



En los años que he estado trabajando con el tiempo en diferentes lenguajes de programación, he descubierto que los siguientes conocimientos son muy útiles.

Elegir el formato de datos correcto

El primer paso al trabajar con horas y fechas es elegir una representación para sus datos. Si bien los diferentes formatos pueden parecer más o menos iguales, el formato que elija tendrá un gran impacto en la forma en que escribe y depura su código.

Usar una marca de tiempo numérica cuando necesite una fecha significará analizar la marca de tiempo de la fecha y recuperar la fecha a partir de ella, lo que puede o no ser sencillo según la zona horaria.


que hace 143

El uso de una cadena personalizada para representar un período de tiempo parece fácil de almacenar y manipular, pero es difícil de consultar. Además, el uso de cualquier tipo de representación que no sea reconocible de inmediato por el ojo humano dificultará la depuración del código.

Al elegir un formato para fechas u horas, cumplo con las siguientes reglas:



  1. Nunca use marcas de tiempo numéricas. A menudo son los más fáciles de obtener mediante bibliotecas estándar entre varios lenguajes de programación, pero no son legibles por humanos y la tentación de manipularlos es demasiado fuerte.
  2. Acatar ISO 8601 , un estándar que define un formato para datos relacionados con la fecha y la hora. Es trivial encontrar una biblioteca para cualquier idioma que pueda manejar las variaciones de ISO 8601.
  3. ISO 8601 es un estándar, pero tiene muchas variaciones. Siempre debe elegir la variante de ISO 8601 más legible por humanos. Esto no requiere ningún esfuerzo adicional pero facilita la depuración.
  4. Su cadena de marca de tiempo solo debe contener los datos que necesita absolutamente. Cuando trabaje con horas, su cadena no debe contener una fecha y cuando trabaje con una fecha que sea independiente de la zona horaria, su cadena no debe contener una zona horaria. Agregar información adicional agrega ambigüedad a la operación de análisis y a la intención de los datos para futuros desarrolladores
  5. Al almacenar zonas horarias, siempre normalícelas a la misma zona horaria en sus marcas de tiempo. Esto no solo hace que sea más fácil para una computadora clasificar y procesar los datos, sino que también lo hace más fácil para un desarrollador humano.

Cumplir con estas reglas no le costará mucho por adelantado, pero le facilitarán la vida cuando se establezca su aplicación y descubra que el uso de las horas y las fechas no es lo que esperaba.

Elegir la herramienta adecuada

Como ocurre con la mayoría de los problemas de nuestra industria, el manejo de la hora y la fecha se reduce a elegir la herramienta adecuada para el trabajo.

Es tentador utilizar las herramientas de la biblioteca estándar de su idioma favorito, pero puede que no sea la mejor opción. Si bien algunas bibliotecas estándar tienen características fantásticas de fecha y hora (Python), otras son francamente lamentables (Javascript). El uso de la herramienta incorrecta hace que sea mucho más difícil desarrollar funciones basadas en el tiempo y eso hace que sea más fácil que los errores se cuelen en su aplicación.



Una buena biblioteca para manejar fechas y horas le permitirá seguir las 5 reglas mencionadas anteriormente. Específicamente, debería poder:

  • Analice cualquier representación de fecha que pueda encontrar (incluidas las representaciones externas).
  • Salida a cualquier representación de fecha que pueda necesitar (incluidas las representaciones externas).
  • Manipula fechas y horas sumando o restando unidades de tiempo.
  • Compare fechas y horas.
  • Convertir correctamente entre zonas horarias.

Es importante que su biblioteca admita estas funciones; de lo contrario, la tentación de intentar implementar la funcionalidad usted mismo será demasiado alta. Y para que quede claro, si intenta implementar alguna de esas funciones usted mismo, fallará.

No analice sus propias marcas de tiempo con expresiones regulares, no agregue segundos a una marca de tiempo numérica porque parece un número normal y no compare fechas y horas con el operador de igualdad. Estas bibliotecas existen porque estos problemas son difíciles de resolver y reinventar la rueda en tu aplicación te dejará con una rueda rota.

A continuación, tengo algunas sugerencias para bibliotecas que se ajustan a estos criterios:

Idioma Biblioteca
Pitón Biblioteca estándar
Javascript Momento y Zona horaria del momento
Java 8 y superior Biblioteca estándar (hora de java)
Java 7 y versiones anteriores Joda-Time
Rápido SwiftDate

Si su idioma no está en la lista (porque no estoy lo suficientemente familiarizado con él) simplemente busque la biblioteca de fecha y hora. Es probable que encuentre una buena biblioteca que hará todo lo que necesita.

Conociendo el tiempo

El último conocimiento que tengo que compartir no es específico para trabajar con fechas y horas, sino más bien una filosofía general para ayudarnos a evitar problemas y se aplica tanto al manejo de la fecha y la hora como a cualquier otro problema de programación. .

Siempre verifique sus suposiciones.

Abordamos cada problema presentado con un gran cuerpo de conocimiento y un cuerpo aún mayor de supuestos. Al manejar fechas y horas, es más importante que nunca verificar sus suposiciones para asegurarse de que aún sean válidas para su escenario.

Esta lista , titulado Falsehoods Programmers Believe About Time, ofrece muchos ejemplos excelentes que ilustran que el tiempo probablemente no es lo que pensaba. Cuando esté diseñando o desarrollando una función que se centre en el tiempo, le animo a que busque un socio y revise esta lista para asegurarse de haber evitado las trampas enumeradas.

Los errores de tiempo son notoriamente difíciles de detectar y aún más difíciles de probar. Si desarrolla con esta lista en mente, es posible que pueda evitar errores sutiles que afectarían a sus clientes pero que podrían no detectar (¡el peor tipo de error!)

Zonas horarias

Ninguna discusión sobre horas o fechas estaría completa sin mencionar las zonas horarias. Además de familiarizarse con las falsedades comunes enumeradas anteriormente, también familiarícese con los conceptos básicos de las zonas horarias.

Las zonas horarias siempre serán un punto de dolor cuando se trabaja con el tiempo, incluso si cree que las tiene 'todas resueltas'. Tener un poco de conocimiento sobre las zonas horarias te ayudará a centrar tu pensamiento y te ayudará a asegurarte de que no cometas ningún error lógico al manipular los tiempos.

Desafortunadamente, no hay forma de evitar por completo la dificultad de almacenar y manipular horas y fechas al programar. Pero si sigue estos pasos y trabaja con este conocimiento en mente, puede facilitar la tarea reduciendo la cantidad de código que tiene que escribir y forzándose a adoptar paradigmas que tienen menos probabilidades de causar problemas.

Compartir Con Tus Amigos: