¿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?
sql
engineering
rdbms
date-format
lucaswxp
fuente
fuente
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.Respuestas:
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.
fuente
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í).
fuente
Si. Esas piezas de software utilizarán ISO 8601 .
ISO 8601 tiene una serie de ventajas sobre otros formatos de fecha:
1_file, 10_file, 2_file
).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 .
El estándar define variaciones "básicas" como minimizar el uso de delimitadores. Entonces,
YYYYMMDD
es la alternativa básica al formato extendidoYYYY-MM-DD
.fuente
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?)
fuente
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.
fuente
feature_test_macros(7)
, como tener_POSIX_C_SOURCE > 200809L
medios que admiten las características de POSIX.1-2008 ...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.
fuente
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.
fuente
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.
fuente
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.
fuente
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"
).fuente
1970*
y197005*
representa la sintaxis de comodín "glob", puede buscar un montón de fechas MMDDYYYY buscando el glob*1970
o05*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.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.
fuente
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.
fuente
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%d
en elstrftime
lenguaje) 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)
Salida:
Pitón
salida:
C
Salida:
C ++
Salida:
Javascript
Salida:
SQLite
Salida:
LibreOffice Calc
Gnumeric
OnlyOffice
Python + numpy
Salida:
Python + pandas
Salida:
Ingeniería de software
apport.log
alternativas.log
tazas / acceso.log
syslog
fuente
Do 27. Sep 22:27:09 CEST 2018
aquí.)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%'
odateasint BETWEEN 20181200 and 20181299
algo para lo que se puede usar un índicePor 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
fuente