¿Hay alguna razón técnica por la cual, en la programación, el formato de fecha predeterminado es AAAAMMDD y no otra cosa?

118

¿Hay alguna razón de ingeniería por qué es así? Me preguntaba en el caso de un RDBMS que tenía algo que ver con el rendimiento, ya que un "AÑO" es más específico que un "MES", por ejemplo: solo tiene un año 2000, pero cada año tiene "enero", lo que haría más fácil / más rápido filtrar / ordenar algo por año primero, y es por eso que el año viene primero.

Pero no sé si eso realmente tiene sentido ... ¿Hay alguna razón?

lucaswxp
fuente
14
@IMil Puede que no nos guste, pero a menudo se almacenan como cadenas.
Honza Brabec
14
@candied_orange Eso sería extraño, especialmente en el caso de las fechas.
glglgl
43
xkcd.com/1179
Helio
19
Como nota al margen, este formato no es que extraño. Por ejemplo, en idioma húngaro (y probablemente algunos otros también) AAAA. MM. DD. es el formato de fecha escrito predeterminado y ha pasado mucho tiempo antes que las computadoras.
Neinstein
31
En programación, el formato de fecha predeterminado es "AAAAMMDD"? Sería bueno si eso fuera cierto, pero definitivamente ese no es el caso en todas partes. RFC 822 y RFC 850, así como los ANSI C asctime, todavía se usan ampliamente en muchos lugares. Es bueno que RFC 3339 e ISO 8601 estén desplazando gradualmente los formatos más antiguos, y ciertamente son lo que se debe usar en el futuro. En términos más generales, diría que la forma básica ISO 8601 (YYYYMMDD sin caracteres separadores) es en realidad menos común que otras formas, como YYYY-MM-DD.
Daniel Pryden

Respuestas:

386

De esta manera, las fechas se pueden clasificar fácilmente como cadenas utilizando las reglas de clasificación predeterminadas (es decir, clasificación lexicográfica ).

Esta es también la razón por la que tanto el mes como el día se especifican usando dos dígitos (agregando un cero inicial si es necesario).

De hecho, es uno de los formatos de fecha definidos por ISO 8601 . Ese estándar también define un formato de fecha y hora 2015-03-27T15:26:40Z, que también se puede clasificar como cadenas.

Sin embargo, AAAAMMDD tiene el beneficio adicional de hacer posible analizar fácilmente (sin subcadenas o reemplazos de caracteres) la cadena como un número entero, y aún así usar el orden predeterminado en los números enteros.

Arseni Mourzenko
fuente
90
@lucaswxp: Si escribe una comparación de casos especiales para cadenas que siguen un esquema específico, por supuesto, puede hacerlo tan barroco como desee. Lo que ocurre aquí es que el esquema está diseñado de tal manera que el orden léxico (así como el orden de reconocimiento de números léxicos) también es un orden lógico, por lo que no es necesario personalizarlo.
Deduplicador
19
@lucaswxp Es posible que su cadena de fecha no esté en la memoria. Ejemplo práctico: ya tiene un archivo csv ordenado por fecha ISO y millones + de filas por año. Y desea devolver solo las filas entre ciertas fechas. Puede leer el archivo línea por línea (fila por fila) hasta llegar a su primera fecha, luego cargar filas en la memoria hasta llegar a su última fecha. Puede omitir el resto del archivo. Pero si guarda la fecha como algún otro formato, o si se ordena por año solamente, tendría que leer todo el año de registros antes de cerrar el archivo.
Tom A. Vibeto
48
Tenga en cuenta que los guiones son opcionales en ISO 8601, por lo que AAAAMMDD es ISO 8601.
Martin Ba
32
@Benoit Ya se ha hecho una propuesta para resolver el problema Y10K. Si todavía usamos la misma era, iremos a AAAAAMMDD hasta Y100K, que será BYYYYYYMMDD, CYYYYYYYMMDD, DYYYYYYYYMMDD, EYYYYYYYYYMMDD. Este prefijo alfa principal asegura un orden de clasificación correcto (siempre que "A0YYYY ..." etc. sean representaciones no válidas si todavía se usan fechas AAAA ...). En algún momento cuando el número de dígitos del año es divisible entre tres, comenzaremos a agregar tres dígitos cada vez que cambiemos el prefijo alfa, para asegurarnos de que no se nos acaben las letras antes de la muerte por calor del universo.
Monty Harder
35
Es importante tener en cuenta que con este formato, la clasificación no es solo "más fácil". La ordenación léxica (basada en caracteres) se vuelve equivalente a la ordenación temporal, lo que significa que puede ordenar temporalmente sin analizar .
jpmc26
135

Aún no se menciona, pero rápidamente pasa por alto el pedido dentro de AAAA. Eso ya es milenios, siglos, décadas, años. Es decir, AAAA ya está ordenado del período más largo al más corto. Lo mismo ocurre con MM y DD, así es como funciona el sistema numérico.

Entonces, para mantener el orden entre campos consistente con el orden dentro de los campos, la única opción es AAAAMMDD.

Como señalaron zahbaz y Arseni Mourzenko, los formatos AAAAMMDD se clasifican fácilmente. Esa no es una coincidencia afortunada, es una consecuencia directa de poner los campos por la mayor duración primero (y mantener la longitud fija; estamos presentando un problema Y10K aquí).

MSalters
fuente
34
Si bien puede estar bromeando, este código puede llegar a perseguirnos en 8000 años. El código vive más de lo que nadie espera ... 😓
deceze
15
@deceze ISO8601 ya tiene disposiciones para un año de 5 dígitos, pero sería interesante ver qué implementaciones de DateTime lo permiten actualmente.
Zac Faragher
44
@ZacFaragher, estoy seguro de que tendremos mucho tiempo para implementar eso más tarde, no hay necesidad de apresurarse, ¿verdad ...?
ilkkachu
51
@deceze ¿Por qué me descongelaste? ¿Has descubierto cómo curar el cáncer? No, es el año 9999 y conoces COBOL.
user3067860
66
Es posible que desee corregir su error tipográfico. La palabra milenios , el plural de milenio , se deletrea obligatoriamente con un doble N para que coincida con el doble N anual del latín annus por año. Cuando lo escribe mal con solo una N, ahora desafortunadamente coincide con la N simple de anal del ano latino con el mismo significado que su palabra de préstamo en los deportes en inglés. En resumen, siempre debes deletrearlo de una manera que signifique que estás hablando de miles de años, no de miles de agujeros. :)
tchrist
57

¿Hay alguna razón en absoluto?

Si. Esas piezas de software utilizarán ISO 8601 .

ISO 8601 tiene una serie de ventajas sobre otros formatos de fecha:

  • Es un estándar con un documento de especificación :)
  • Es inequívoco. mm / dd / aaaa y dd / mm / aaaa pueden ser confusos a menos que haya pasado el día 13.
  • Se clasifica lexicográficamente en orden de tiempo ascendente, por lo que no se requiere una lógica especial de clasificación de fechas. Esto es especialmente útil en nombres de archivos, donde la clasificación de números lexicográficos a menudo es confusa (por ejemplo 1_file, 10_file, 2_file).
  • Exige año y año de 4 dígitos y mes y año con relleno cero. Esto evita el problema del año 2000 y otras ambigüedades.

En cuanto a por qué ISO 8601 existe en primer lugar, es porque las personas encontraban formatos de fecha ambiguos y confusos al intercambiar datos entre países / sistemas, y necesitaban algo inequívoco.

Para la justificación, vea la introducción de la especificación .

Aunque las Recomendaciones y Normas ISO en este campo han estado disponibles desde 1971, las diferentes formas de representación numérica de fechas y horas han sido de uso común en diferentes países. Cuando tales representaciones se intercambian a través de las fronteras nacionales, puede ocurrir una mala interpretación de la importancia de los números, lo que resulta en confusión y otros errores o pérdidas consecuentes. El propósito de esta Norma Internacional es eliminar el riesgo de malas interpretaciones y evitar la confusión y sus consecuencias.

...

Esta norma internacional conserva las expresiones más utilizadas para la fecha y hora del día y sus representaciones de las normas internacionales anteriores y proporciona representaciones únicas para algunas expresiones nuevas utilizadas en la práctica. Su aplicación en el intercambio de información, especialmente entre los sistemas de procesamiento de datos y los equipos asociados, eliminará los errores derivados de una mala interpretación y los costos que estos generan. La promoción de esta Norma Internacional no solo facilitará el intercambio a través de las fronteras internacionales, sino que también mejorará la portabilidad del software y aliviará los problemas de comunicación dentro de una organización, así como entre organizaciones.

El estándar define variaciones "básicas" como minimizar el uso de delimitadores. Entonces, YYYYMMDDes la alternativa básica al formato extendido YYYY-MM-DD.

Vaina
fuente
44
No sabía que ISO 8601 también permite AAAAMMDD además de AAAA-MM-DD.
keuleJ
iso.org/iso-8601-date-and-time-format.html parece indicar que el "Formato extendido" de AAAA-MM-DD es el único formato para 8601?
Oskar Austegard el
3
@keuleJ Minimizar el uso de delimitadores como AAAAMMDD en lugar de AAAA-MM-DD se denomina variación de formato "básico" en el estándar ISO 8601.
Basil Bourque
Dos beneficios más de la ISO 8601: (a) Fácil de analizar por máquina sin caracteres de ESPACIO y sin texto localizado, y (b) Fácil de intuir por los humanos en todas las culturas, el primer año será fácil de reconocer (si es contemporáneo), y sin asumir el idioma inglés.
Basil Bourque
55

Es porque todas las otras formas de hacerlo son ambiguas.

01/02/2003 ¿qué significa eso? 2 de enero de 2003? ¿O en Europa: 1 de febrero de 2003? Se pone aún peor si usa dos dígitos para el año, como 01/02/03.

Es por eso que usa AAAAMMDD, es la convención que nos permite comunicarnos claramente sobre las fechas, 20030201 como una fecha siempre está clara. (y hace que sea más fácil de ordenar)

(Ahora no vayas a almacenar eso como el número entero 20 millones 30 mil 2cientos 1. por favor ¿ok? ¿Bonito por favor?)

Pieter B
fuente
14
"20030201 como fecha siempre está clara" : Ese no es el caso en absoluto. Es tan ambiguo como "01/02/2003" a menos que sepa que AAAAMMDD (¿o es AAAAMDDMM o DDMMYYYY? ...) se está utilizando el formato. SIEMPRE necesita saber el formato de la fecha; no existe una "convención" que haga las cosas inequívocas.
skomisa
66
@skomisa que es bastante incorrecto. ISO 8601 definió el formato de fecha estándar internacional específicamente por las razones que usted indicó. Ninguno de los otros formatos son formatos de fecha válidos y no lo han sido desde 19880605
K. Alan Bates
11
@ K.AlanBates Su fecha es ambigua a menos que supongamos que debe analizarse de acuerdo con la norma ISO 8601.
Goyo
16
20030201 es el 20 de marzo de 201AD, ¿verdad?
David Richerby
10
@Martijn, pero específico del idioma. En Turquía, es Şubat en lugar de febrero (antes de que piense que su código funciona, compruebe siempre Turquía ).
NH.
19

Deje que t1 y t2 sean enteros distintos que representan dos veces escritos en formato AAAAMMDD. Entonces t1 <t2 implica que t2 ocurrió después de t1.

Pierde este pedido con el primer formato DD y MM.

ISO es, IMO, el único formato sensible.

zahbaz
fuente
1
Excepto que nunca almacenarías esto como un número entero, al menos nunca lo he visto ni lo he considerado.
tubería
55
@pipe: Créeme, algunas personas lo harían. Mantenemos un sistema heredado que almacena AAAAMMDD como enteros. El diseño probablemente se originó en algún sistema de base de datos antiguo sin un tipo de fecha explícito y se mantuvo por compatibilidad con versiones anteriores. No es lindo. No lo hagas
Heinzi
19
@pipe ha sido mi experiencia en la industria del software que siempre que una persona razonable quiera decir "Pero nunca harías X" siempre hay al menos un contraejemplo
Joseph Rogers,
55
@pipe En el almacenamiento de datos no es raro usar un número entero aaaammdd como clave principal / sustituta para una tabla de fechas.
Soapygopher
44
@pipe, bueno, el número de secuencia de una zona DNS es un número entero de 32 bits, que debe incrementarse cuando la zona cambia. Si bien podría ser solo un número simple, un idioma común es usar números como 2018092601 ... Luego hay algunas definiciones curiosas de números mágicos descritos en feature_test_macros(7), como tener _POSIX_C_SOURCE > 200809Lmedios que admiten las características de POSIX.1-2008 ...
ilkkachu
12

Un punto no mencionado es que, en las entradas interactivas, este formato permite controlar la entrada.

El sistema no puede saber si un mes tiene 28, 29, 30 o 31 días sin conocer el año y el mes específicos. Cuando la entrada interactiva ordena que el año y el mes sean lo primero, puede verificar si el día (insertado al final) está en el rango permitido.

Por supuesto, la pregunta era en gran medida sobre el formato de fecha, pero se puede argumentar que el formato de fecha sigue el formato presentado al usuario.

Martín
fuente
7

AAAAMMDD ordena las fechas de la misma manera que ordena los números: la porción más importante primero. MMDDYYYY sería como escribir "ciento veintitrés" como "veintitrés tres".

En nuestra cultura, tenemos una comprensión natural de MMDDYYYY porque, como humanos, tenemos conciencia del tiempo y los años progresan lentamente. Generalmente sabemos de qué año es. Ver el año rara vez importa, así que lo empujamos hacia atrás. Los meses cambian lo suficientemente rápido como para mantener su importancia. Otras culturas manejan esto de manera diferente. Gran parte del mundo prefiere DDMMYYYY.

Joel Coehoorn
fuente
6262
Es posible que desee reformular "nuestra cultura" porque en mi cultura es DDMMYYYY, así que no es "nuestra" cultura solo suya
slebetman
66
Mapa completo de todos los países que usan el formato de fecha MMDDYYYY img-9gag-fun.9cache.com/photo/a2mXmGd_700b.jpg
Peregrine
99
Parece un argumento extraño: "Los meses cambian lo suficientemente rápido como para mantener su importancia" -> ¿Por qué no poner el día primero ya que eso cambia aún más rápido?
Wim Deblauwe
77
@JoelCoehoorn, es fácil hacerlo explícito ("En nuestra cultura estadounidense"). "nuestro" / "nosotros" se usa a menudo para significar "la comunidad de intercambio de pila" aquí.
AnoE
14
Exactamente. Stackoverflow es internacional . El hecho de que usted tenga su sede en los EE. UU. No dice, implica o incluso hace que sea más probable que otros también lo estén. No puede asumir nada sobre la localidad de sus lectores aquí, están en todo el mundo. Y la mayoría de sus lectores no serán ni usted ni el OP, sino otras personas que encontrarán su respuesta en Google. Este mismo comentario está escrito en un continente diferente al que vives. Y aunque tenemos nuestros propios hábitos, ehm, interesantes , ciertamente no usamos MM / DD / AAAA aquí ...
cmaster
6

Se ha mencionado la clasificación, pero la razón más útil para hacerlo es compararlos como "cadenas", y sí, una marca de tiempo de 26 caracteres se ordena de manera similar.

Soy consciente de que tales comparaciones son esenciales para la ordenación, pero generalmente es útil para una ordenación de 2 elementos.

He trabajado en proyectos donde esto no se adoptó, y sí, los programadores intentaron (con resultados mixtos) comparar las fechas como cadenas.

El formato bonito es para el lado del cliente o la composición tipográfica.

mckenzm
fuente
5

Este formato hace que el orden alfabético de las cadenas sea idéntico al orden cronológico de las fechas. Esto es útil porque muchas herramientas proporcionan un orden alfabético de, por ejemplo, archivos por nombre, pero no hay forma de analizar fechas formateadas arbitrariamente a partir de nombres de archivos y ordenarlas por esos.

WolfgangGroiss
fuente
4

Se trata de la restricción. Imagine AÑO, MES y DÍA como parámetros, en el formato AAAAMMDD cada parámetro es más restrictivo que el anterior.

Entonces, si desea buscar algo que sucedió en 1970, puede hacerlo buscando una cadena que comience por "1970*", pero si recuerda qué mes fue, puede agregar el mes como "197005*". De esta manera, cada "parámetro" de la fecha le brinda información más específica.

Es la única forma de pasar de información menos específica ( "1970*") a información más específica ( "19700523").

mrvinent
fuente
3
No es realmente un gran argumento: es tan común buscar cosas que suceden en meses específicos en lugar de años específicos.
Cubic
1
Si 1970*y 197005*representa la sintaxis de comodín "glob", puede buscar un montón de fechas MMDDYYYY buscando el glob *1970o 05*1970. Su respuesta podría estar implícitamente asumiendo alguna restricción adicional que no mencionó explícitamente, y podría mejorarse explicando su suposición.
Quuxplusone
3
Esto es una especie de efecto secundario u otra forma de describir el orden de las teclas de clasificación mencionado por otras respuestas. Pero esta explicación se desmorona a menos que la restrinja a la búsqueda de prefijos. (Más fácil de indexar, pero de ninguna manera se requiere).
Peter Cordes
También significa que puede seleccionar una secuencia de fechas con expresiones regulares relativamente simples ...
Harper
1

Por qué, en programación, el formato de fecha predeterminado es AAAAMMDD ...

Es un formato legible por humanos para entrada y salida, no necesariamente se almacena de esa manera.

Más de un tercio de todos los lenguajes de programación se desarrollaron en un país con el inglés como idioma principal y la mayoría de los modernos se adhieren a un estándar de alguna descripción: el estándar internacional para fechas es ISO 8601 .

Más información: (TMI?)

A medida que cambia el tiempo, generalmente hacia adelante, los días se incrementan primero, luego los meses, los últimos años, podría ser más fácil de entender si tuviéramos fechas decimales (y tiempo decimal ), a medida que pasa el tiempo, el número aumenta. Simplemente es más fácil para los humanos mirar el número y compararlo con otra fecha de un vistazo.

A la computadora no le importa qué estructura quiere usar y en la mayoría de las computadoras (pero no en todas ) se usa la lógica binaria : la base e en realidad tiene la economía de radix más baja, pero no es la más eficiente ni la más fácil para una secuencia completa .

El formato real de entrada y salida para las fechas varía según el país y se establece por localización , mientras que AAAAMMDD puede parecer tener más sentido y ser lo que está acostumbrado, no es universal hoy, ni lo fue en el pasado para el tiempo más largo, aún hoy en día los números romanos se usan comúnmente para fechas .

Conocer el año inicial le indica la cantidad de días en un año, la mayor variación en la duración que puede sufrir un año. Le informa por adelantado el número de días en cada mes a seguir (para la verificación de errores durante la entrada), lo que permite que la entrada del día primero tenga que respaldarlo si el año siguiente no estuvo de acuerdo con su entrada, posiblemente haciendo que la entrada accesible sea más difícil . También tiene importancia con respecto al formato del calendario . Vea también el calendario geek , con sus fechas decimales.

En lo que respecta a la computadora, es probable que use el tiempo de UNIX Epoch , la cantidad de segundos que han transcurrido desde las 00:00:00 hora universal coordinada (UTC), jueves 1 de enero de 1970, donde todos los días se tratan como si contuvieran exactamente 86400 segundos. Ver también el día juliano . El formato AAAAMMDD es simplemente preferido por humanos egocéntricos, la IAU considera un año juliano como 365,25 días (31,5576 millones de segundos) a menos que se especifique lo contrario.

Robar
fuente
1
En realidad, casi todos los humanos y software que he conocido prefieren algún otro formato.
Goyo
1
¡Encantado de conocerte! Soy Dave, y prefiero AAAAMMDD
Ingeniero invertido el
0

Otro uso que he visto para esta representación es que puede almacenar fechas como enteros (es decir, en una base de datos), utilizando solo 4 bytes por fecha. Usar AAAAMMDD significa que las comparaciones de enteros (a menudo una sola instrucción de máquina) tienen el mismo resultado que las comparaciones en la fecha representada. Y se imprime moderadamente legible para humanos. Y nada de esto requiere ningún código o soporte especial, en cualquier entorno de programación convencional.

Si esas cosas son la mayor parte de lo que necesita hacer con las fechas, y necesita hacer mucho, entonces este formato tiene mucho atractivo.

En comparación, las fechas en formatos comunes como DD / MM / AAAA toman 10 bytes como cadenas de caracteres ASCII. Las cadenas AAAAMMDD reducen eso a 8 y obtienen la ventaja de "comparar las representaciones tiene el mismo resultado que comparar las fechas", pero incluso entonces la comparación basada en cadenas es carácter por carácter en lugar de una única comparación de enteros.

Ben
fuente
2
Es trivial empaquetar una fecha en tres bytes. El rango 0000 ~ 9999 requiere 14 bits, 01 ~ 12 requiere 4 bits y 01 ~ 31 requiere 5 bits, para una suma de 23 bits. Al usar también el bit restante en una cantidad de tres bytes, puede representar fechas durante un período de 32,768 años manteniendo una resolución de un día. Esto podría usarse, por ejemplo, para permitir representar fechas en el año del rango 8191 a. C. hasta el 24576 d. C. Al empaquetar los bits como, digamos, aaaaaaaaaaaaaaaammmmddddd, la representación decimal sigue siendo directamente comparable (aunque no directamente legible para los humanos, pero ¿a quién le importa el almacenamiento físico de la base de datos?).
un CVn
0

La misma razón por la que la Luna está hecha de queso verde: no lo está. En la mayoría de los casos, el formato predeterminado es algún tipo de cadena localizada. A veces se usa el formato ISO, pero generalmente con guiones para una mejor legibilidad. YYYYMMDD(o %Y%m%den el strftimelenguaje) rara vez es el predeterminado. Para ser justos, estoy seguro de que lo he visto, pero no puedo pensar en un ejemplo en este momento.

Fecha Unix (utilidades principales de GNU)

date

Salida:

Wed Sep 26 22:20:57 CEST 2018

Pitón

import time
print(time.ctime())

salida:

Wed Sep 26 22:27:20 2018

C

#include <stdio.h>
#include <time.h>

int main () {
   time_t curtime;

   time(&curtime);
   printf(ctime(&curtime));
   return(0);
}

Salida:

Wed Sep 26 22:40:01 2018

C ++

#include <ctime>
#include <iostream>

int main()
{
    std::time_t result = std::time(nullptr);
    std::cout << std::ctime(&result);
}

Salida:

Wed Sep 26 22:51:22 2018

Javascript

current_date = new Date ( );
current_date;

Salida:

Wed Sep 26 2018 23:15:22 GMT+0200 (CEST)

SQLite

SELECT date('now');

Salida:

2018-09-26

LibreOffice Calc

ingrese la descripción de la imagen aquí

Gnumeric

ingrese la descripción de la imagen aquí

OnlyOffice

ingrese la descripción de la imagen aquí

Python + numpy

import numpy as np
pd.datetime64('now')

Salida:

numpy.datetime64('2018-09-26T21:31:55')

Python + pandas

import pandas as pd
pd.Timestamp('now', unit='s')

Salida:

Timestamp('2018-09-26 21:47:01.277114153')

Ingeniería de software

ingrese la descripción de la imagen aquí

apport.log

ERROR: apport (pid 9742) Fri Sep 28 17:39:44 2018: called for pid 1534, signal 6, core limit 0, dump mode 2

alternativas.log

update-alternatives 2018-05-08 15:14:24: run with --quiet --install /usr/bin/awk awk /usr/bin/mawk 5 --slave /usr/share/man/man1/awk.1.gz awk.1.gz /usr/share/man/man1/mawk.1.gz --slave /usr/bin/nawk nawk /usr/bin/mawk --slave /usr/share/man/man1/nawk.1.gz nawk.1.gz /usr/share/man/man1/mawk.1.gz

tazas / acceso.log

localhost - - [28/Sep/2018:16:41:58 +0200] "POST / HTTP/1.1" 200 360 Create-Printer-Subscriptions successful-ok

syslog

Sep 28 16:41:46 pop-os rsyslogd:  [origin software="rsyslogd" swVersion="8.32.0" x-pid="946" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Goyo
fuente
10
para agregar a su argumento, ¿cuántos de ellos están formateados de esa manera debido a la configuración del usuario en la computadora en la que ejecutó el script?
Topher Brink
El primero no es realmente "bash", es el programa de fechas (y sale Do 27. Sep 22:27:09 CEST 2018aquí.)
Paŭlo Ebermann
@ PaŭloEbermann Tienes razón, espero que sea mejor ahora. Como dije, muchos de estos formatos están localizados, por lo que el formato real que vea dependerá de sus opciones de localización.
Goyo
3
Si bien el punto de esta respuesta es cierto para las aplicaciones orientadas al usuario final, no es así para el intercambio de datos entre sistemas, la serialización de datos, los protocolos de mensajes / datos, el registro, el seguimiento, los depuradores, etc. El estándar ISO 8601 se está convirtiendo rápidamente en la norma para tales usos dirigidos a administradores y programadores de sistemas. Lo mismo ocurre con los escenarios internacionales o locales.
Basil Bourque
@BasilBourque Gracias, agregué una muestra aleatoria de los registros que encontré en mi propio sistema. No tengo ejemplos de los otros tipos a mano. Pero no creo que una tendencia hacia el valor predeterminado de ISO 8601 en dominios específicos haga que su variante básica sea "la predeterminada en la programación" frente a la gran cantidad de software que se predetermina a otros formatos.
Goyo
-1

Un beneficio adicional no mencionado hasta ahora es que la cuantificación deseable (asignar un valor preciso como perteneciente al mismo rango general de valores) es una operación única relativamente fácil y rápida.

Supongamos que está escribiendo un informe que resume los eventos de hoy, como la suma y el número de ventas. La fecha y la hora de la venta se almacenan como AAAAMMDDHHMISS, simplemente necesita mantener los 8 caracteres más a la izquierda (si es una cadena) o la división de enteros (es decir, el piso) por 1,000,000 para reducir su fecha y hora al día de la venta.

Del mismo modo, si desea las ventas del mes, mantenga solo los 6 dígitos más a la izquierda, o divídalos entre 100,000,000

Claro, podría argumentar que cualquier manipulación de cadenas es posible, una fecha y hora para las ventas de "12-12-2018 12:34 pm" podría ser subcadenada y manipulada varias veces para obtener el mes y el año. En forma numérica, 122520181234 podría dividirse y modificarse, multiplicarse y dividirse un poco más, y eventualmente también produciría un mes y un año ... pero el código sería realmente difícil de escribir, leer, mantener y comprender.

E incluso los sofisticados optimizadores de bases de datos podrían no ser capaces de hacer uso de un índice en una columna para una cláusula where si el formulario de fecha era MM / DD / AAAA pero cortado y reconstruido. En comparación, almacenar una representación AAAAMMDD y querer diciembre de 2018 conduce a dónde se pueden utilizar fácilmente las cláusulas del tipo dateasstring LIKE '201812%'o dateasint BETWEEN 20181200 and 20181299algo para lo que se puede usar un índice

Por lo tanto, si no hubiera un tipo de datos dedicado para fechas y la representación de cadena / numérica fuera la única opción, usar y almacenar tiempos en alguna representación del intervalo más largo a la izquierda al intervalo más corto a la izquierda derecho tiene bastantes beneficios para facilitar la comprensión, manipulación, almacenamiento, recuperación y mantenimiento de código

Caius Jard
fuente