web-dev-qa-db-fra.com

Y a-t-il une raison technique pour laquelle, dans la programmation, le format de date par défaut est YYYYMMDD et pas autre chose?

Y a-t-il une raison technique pour laquelle c'est comme ça? Je me demandais dans le cas d'un SGBDR que cela avait quelque chose à voir avec les performances, car une "ANNÉE" est plus spécifique qu'un "MOIS", par exemple: vous n'avez qu'une année 2000, mais chaque année avez "janvier", ce qui permettrait de filtrer/trier plus facilement/plus rapidement quelque chose par année d'abord, et c'est pourquoi l'année vient en premier.

Mais je ne sais pas si cela a vraiment du sens ... Y a-t-il une raison?

123
lucaswxp

De cette façon, les dates peuvent facilement être triées sous forme de chaînes en utilisant les règles de tri par défaut (c'est-à-dire tri lexicographique ).

C'est également la raison pour laquelle le mois et le jour sont spécifiés à l'aide de deux chiffres (en ajoutant un zéro de tête si nécessaire).

En fait, c'est l'un des formats de date définis par ISO 8601 . Cette norme définit également un format de date et d'heure, 2015-03-27T15:26:40Z, qui peut également être trié sous forme de chaînes.

Cependant, YYYYMMDD a l'avantage supplémentaire de permettre facilement (pas de sous-chaînes ou de remplacements de caractères impliqués) d'analyser la chaîne comme un entier et d'utiliser toujours l'ordre par défaut sur les entiers.

387
Arseni Mourzenko

Pas encore mentionné, mais vous passez rapidement sur la commande à l'intérieur YYYY. C'est déjà des millénaires, des siècles, des décennies, des années. C'est-à-dire que YYYY est déjà commandé de la période la plus longue à la période la plus courte. Il en va de même pour MM et DD, c'est ainsi que fonctionne le système numérique.

Donc, pour garder l'ordre entre les champs cohérents avec l'ordre dans les champs, la seule option est YYYYMMDD.

Comme l'ont noté zahbaz et Arseni Mourzenko, les formats YYYYMMDD se trient facilement. Ce n'est pas une coïncidence chanceuse, c'est une conséquence directe de mettre les champs pour la durée la plus longue en premier (et de garder la longueur fixe; nous introduisons ici un problème Y10K.)

135
MSalters

Y a-t-il une raison?

Oui. Ces logiciels utiliseront ISO 8601 .

ISO 8601 présente un certain nombre d'avantages par rapport aux autres formats de date:

  • C'est une norme avec un document de spécification :)
  • C'est sans ambiguïté. mm/jj/aaaa et jj/mm/aaaa peuvent prêter à confusion à moins que ce ne soit passé le 13e jour.
  • Il trie lexicographiquement par ordre chronologique croissant, donc aucune logique spéciale de tri des dates n'est requise. Cela est particulièrement utile dans les noms de fichiers, où le tri des numéros lexicographiques est souvent déroutant (par exemple 1_file, 10_file, 2_file).
  • Il requiert une année à 4 chiffres et un mois et une année sans rembourrage. Cela évite le problème de l'an 2000 et d'autres ambiguïtés.

Quant à pourquoi ISO 8601 existe en premier lieu, c'est parce que les gens trouvaient les formats de date ambigus et confus lors de l'échange de données entre les pays/systèmes, et ils avaient besoin de quelque chose d'univoque.

Pour la justification, voir l'introduction de spec .

Bien que les recommandations et normes ISO dans ce domaine soient disponibles depuis 1971, différentes formes de représentation numérique des dates et des heures sont couramment utilisées dans différents pays. Lorsque de telles représentations sont échangées à travers les frontières nationales, une interprétation erronée de la signification des chiffres peut se produire, entraînant une confusion et d'autres erreurs ou pertes consécutives. Le but de la présente Norme internationale est d'éliminer le risque de mauvaise interprétation et d'éviter la confusion et ses conséquences.

...

La présente Norme internationale conserve les expressions les plus couramment utilisées pour la date et l'heure de la journée et leurs représentations des Normes internationales antérieures et fournit des représentations uniques pour certaines nouvelles expressions utilisées dans la pratique. Son application dans l'échange d'informations, en particulier entre les systèmes de traitement des données et les équipements associés, éliminera les erreurs résultant d'une mauvaise interprétation et les coûts qu'elles engendrent. La promotion de la présente Norme internationale facilitera non seulement l'échange au-delà des frontières internationales, mais améliorera également la portabilité des logiciels et atténuera les problèmes de communication au sein d'une organisation, ainsi qu'entre les organisations.

La norme définit les variations "de base" comme minimisant l'utilisation de délimiteurs. Ainsi, YYYYMMDD est l'alternative basique au format étendu YYYY-MM-DD.

57
Pod

C'est parce que toutes les autres façons de le faire sont ambiguës.

01/02/2003 qu'est-ce que cela signifie? 2 janvier 2003? Ou en Europe: 1er février 2003? C'est encore pire si vous utilisez deux chiffres pour l'année, comme le 01/02/03.

C'est pourquoi vous utilisez YYYYMMDD, c'est la convention qui nous permet de communiquer clairement sur les dates, 20030201 car une date est toujours claire. (et cela facilite le tri)

(Maintenant, ne stockez pas cela comme l'entier 20 millions 30 mille 2 cent 1. s'il vous plaît ok? Assez s'il vous plaît?)

55
Pieter B

Soit t1 et t2 des entiers distincts qui représentent deux fois écrits au format AAAAMMJJ. Alors t1 <t2 implique que t2 s'est produit après t1.

Vous perdez cette commande avec le premier formatage DD et MM.

L'ISO est, l'OMI, le seul format sensé.

19
zahbaz

Un point non mentionné est que, dans les entrées interactives, ce format permet de contrôler l'entrée.

Le système ne peut pas savoir si un mois compte 28, 29, 30 ou 31 jours sans connaître l'année et le mois spécifiques. Lorsque l'entrée interactive exige que l'année et le mois viennent en premier, il peut vérifier si le jour (inséré en dernier) est dans la plage autorisée.

Certes, la question portait en grande partie sur le format de date, mais on peut affirmer que le format de date suit le formatage présenté à l'utilisateur.

12
Martin

YYYYMMDD commande les dates de la même manière que vous commandez les numéros: la partie la plus importante en premier. MMDDYYYY reviendrait à écrire "cent vingt-trois" comme "vingt et cent trois".

Dans notre culture, nous avons une compréhension naturelle du MMDDYYYY car, en tant qu'êtres humains, nous avons une conscience du temps et les années progressent lentement. Nous savons généralement de quelle année il s'agit. Voir l'année importe rarement, alors nous la poussons vers l'arrière. Les mois changent juste assez vite pour conserver leur importance. D'autres cultures gèrent cela différemment. Une grande partie du monde préfère DDMMYYYY.

7
Joel Coehoorn

Le tri a été mentionné mais la raison de loin la plus utile est de les comparer en tant que "chaînes", et oui un horodatage de 26 caractères est ordonné de la même manière.

Je suis conscient que ces comparaisons sont essentielles pour le tri, mais elles sont généralement utiles pour un tri à 2 éléments.

J'ai travaillé sur des projets où cela n'a pas été adopté, et oui, les programmeurs ont essayé (avec des résultats mitigés) de comparer les dates sous forme de chaînes.

Le joli formatage est pour le côté client ou la composition.

6
mckenzm

Ce format rend l'ordre alphabétique des chaînes identique à l'ordre chronologique des dates. Ceci est utile car de nombreux outils fournissent un ordre alphabétique, par ex. les fichiers par nom, mais aucun moyen d'analyser les dates au format arbitraire à partir des noms de fichiers et de les trier par ceux-ci.

5
WolfgangGroiss

Il s'agit de restrictivité. Imaginez YEAR, MONTH et DAY comme paramètres, au format YYYYMMDD, chaque paramètre est plus restrictif que le précédent.

Donc, si vous voulez rechercher quelque chose qui s'est produit en 1970, vous pouvez le faire en recherchant une chaîne commençant par "1970*", mais si vous vous souvenez du mois, vous pouvez ajouter le mois comme "197005*". De cette façon, chaque "paramètre" de la date vous donne des informations plus spécifiques.

C'est le seul moyen de passer à partir d'informations moins spécifiques ("1970*") vers des informations plus spécifiques ("19700523").

4
mrvinent

Pourquoi, en programmation, le format de date par défaut est AAAAMMJJ ...

C'est un format lisible par l'homme pour l'entrée et la sortie, il n'est pas nécessairement stocké de cette façon.

Plus d'un tiers de tous les langages de programmation ont été développés dans un pays avec l'anglais comme langue principale et la plupart des langages modernes adhèrent à une norme d'une certaine description - la norme internationale pour les dates est ISO 8601 .

Plus d'informations: (TMI?)

À mesure que le temps change, généralement vers l'avant, les jours augmentent d'abord, puis les mois, enfin les années - il pourrait être plus facile de comprendre si nous avions dates décimales (et heure décimale ) - comme temps passe le nombre devient plus grand. Il est simplement plus facile pour les humains de regarder le nombre et de le comparer à une autre date en un coup d'œil.

L'ordinateur ne fait pas attention quelle structure vous voulez utiliser et dans la plupart (mais pas tous ) ordinateurs logique binaire est utilisé - base e a en fait l'économie radix la plus basse mais n'est pas la plus efficace ni plus simple pour un séquence complète .

L'entrée et la sortie réelles le format des dates varie selon les pays et est défini par localisation , tandis que YYYYMMDD peut sembler avoir le plus de sens et être ce à quoi vous êtes habitué - n'est pas universel aujourd'hui, ni de cette façon dans le passé pendant la plus longue période, mais même aujourd'hui chiffres romains sont couramment utilisé pour les dates .

Connaître l'année à l'avance vous indique le nombre de jours dans une année, la plus grande variation de durée qu'une année peut subir. Il vous indique à l'avance le nombre de jours de chaque mois à suivre (pour la vérification des erreurs lors de la saisie), permettant la saisie du premier jour pourrait devoir vous sauvegarder si l'année suivante n'était pas d'accord avec votre saisie - éventuellement faire accessible saisie plus difficile. Il a également de l'importance en ce qui concerne le format de calendrier . Voir aussi le calendrier geek , avec ses stades décimaux.

En ce qui concerne l'ordinateur, il est susceptible d'utiliser heure d'époque UNIX , le nombre de secondes qui se sont écoulées depuis 00:00:00 heure universelle coordonnée (UTC), jeudi 1er janvier 1970, où chaque jour est traité comme s'il contenait exactement 86400 secondes. Voir aussi le jour julien . Le format AAAAMMJJ est tout simplement préféré par les humains égocentriques, le l'AIU considère une année comme une année julienne de 365,25 jours (31,5576 millions de secondes) sauf indication contraire.

1
Rob

Une autre utilisation que j'ai vue pour cette représentation est que vous pouvez stocker des dates sous forme d'entiers (c'est-à-dire dans une base de données), en utilisant seulement 4 octets par date. L'utilisation de YYYYMMDD signifie alors que les comparaisons entières (souvent une seule instruction machine) ont le même résultat que les comparaisons à la date représentée. Et il imprime de façon modérément lisible par l'homme. Et rien de tout cela ne nécessite de code ou de support spécial, dans n'importe quel environnement de programmation grand public.

Si ces choses sont la plupart de ce que vous devez faire avec les dates et que vous devez en faire beaucoup, alors ce format a beaucoup d'attrait.

En comparaison, les dates dans des formats courants tels que JJ/MM/AAAA prennent 10 octets sous forme de chaînes de caractères ASCII caractères. Les chaînes YYYYMMDD réduisent cela à 8 et obtiennent la valeur "comparer les représentations a le même résultat que comparer l'avantage des dates, mais même dans ce cas, la comparaison basée sur des chaînes est caractère par caractère plutôt qu'une comparaison à un seul entier.

0
Ben

Même raison pour laquelle la Lune est faite de fromage vert: ce n'est pas le cas. Dans la plupart des cas, le format par défaut est une sorte de chaîne localisée. Parfois, le format ISO est utilisé, mais généralement avec des tirets pour une meilleure lisibilité. YYYYMMDD (ou %Y%m%d dans strftime langage) est rarement la valeur par défaut. Pour être juste, je suis sûr de l'avoir vu, mais je ne peux pas penser à un exemple pour le moment.

Date Unix (utilitaires principaux GNU)

date

Production:

Wed Sep 26 22:20:57 CEST 2018

Python

import time
print(time.ctime())

production:

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);
}

Production:

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);
}

Production:

Wed Sep 26 22:51:22 2018

Javascript

current_date = new Date ( );
current_date;

Production:

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

SQLite

SELECT date('now');

Production:

2018-09-26

LibreOffice Calc

enter image description here

Gnumeric

enter image description here

OnlyOffice

enter image description here

Python + numpy

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

Production:

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

Python + pandas

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

Production:

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

Génie logiciel

enter image description here

répart.log

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

alternatives.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

cups/access.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
0
Stop harming Monica