Y a-t-il une raison technique pour laquelle c'est comme ça? Je me demandais dans le cas d’un SGBDR qu’il avait quelque chose à voir avec la performance, puisqu'un "ANNÉE" est plus spécifique qu'un "MOIS", par exemple: vous n’avez qu’un an 2000, mais chaque année un "janvier", ce qui permettrait de filtrer / trier quelque chose par année d’abord en premier, c’est pourquoi l’année commence en premier.
Mais je ne sais pas si cela a vraiment du sens… Y a-t-il une raison du tout?
sql
engineering
rdbms
date-format
lucaswxp
la source
la source
asctime
, sont encore largement utilisés dans de nombreux endroits. Il est intéressant de noter que les RFC 3339 et ISO 8601 remplacent progressivement les anciens formats et qu’ils devraient certainement être utilisés à l’avenir. Plus généralement, je dirais que la forme de base ISO 8601 (YYYYMMDD sans caractères de séparation) est en réalité moins commune que d’autres formes, comme YYYY-MM-DD.Réponses:
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 (le tri lexicographique ).
C'est aussi pourquoi le mois et le jour sont spécifiés à l'aide de deux chiffres (en ajoutant un zéro non significatif si nécessaire).
En fait, il s’agit d’un des formats de date définis par l’ ISO 8601 . Cette norme définit également un format de date et heure
2015-03-27T15:26:40Z
, qui peut également être trié sous forme de chaînes.Toutefois, AAAAMMJJ présente l’avantage supplémentaire de permettre facilement (aucune sous-chaîne ni aucun remplacement de caractère impliqué) d’analyser la chaîne en tant qu’entier, tout en conservant le classement par défaut des entiers.
la source
Pas encore mentionné, mais vous passez rapidement au dessus de la commande dans AAAA. C'est déjà des millénaires, des siècles, des décennies, des années. C'est-à-dire, AAAA est déjà commandé de la plus longue période à la plus courte période. Il en va de même pour MM et DD, c’est ainsi que fonctionne le système de numérotation.
Par conséquent, pour que l'ordre entre les champs soit cohérent avec l'ordre dans les champs, la seule option est AAAAMMJJ.
Comme le soulignent zahbaz et Arseni Mourzenko, les formats AAAAMMJJ s’effectuent facilement. Ce n'est pas une coïncidence chanceuse, c'est une conséquence directe de mettre les champs pour la plus longue durée en premier (et de garder la longueur fixe; nous introduisons ici un problème de Y10K.)
la source
Oui. Ces logiciels utiliseront l’ ISO 8601 .
ISO 8601 présente un certain nombre d'avantages par rapport aux autres formats de date:
1_file, 10_file, 2_file
).Quant à la raison pour laquelle ISO 8601 existe, c’est parce que les utilisateurs trouvaient les formats de date ambigus et confus lorsqu’ils échangeaient des données entre pays / systèmes et qu’ils avaient besoin de quelque chose de non équivoque.
Pour la justification, voir l' introduction de la spécification .
La norme définit les variations «de base» comme minimisant l’utilisation de délimiteurs. Alors,
YYYYMMDD
est l' alternative de base au format étenduYYYY-MM-DD
.la source
C'est parce que toutes les autres façons de le faire sont ambiguës.
01/02/2003 qu'est-ce que cela signifie? Le deuxième janvier 2003? Ou en Europe: le 1er février 2003? Cela devient encore pire si vous utilisez deux chiffres pour l'année, comme 01/02/03.
C'est pourquoi vous utilisez AAAAMMJJ, c'est la convention qui nous permet de communiquer clairement sur les dates, 20030201 étant donné qu'une date est toujours claire. (et ça facilite le tri)
(Maintenant, ne stockez pas cela sous le nombre entier 20 millions 30 mille 2 cent 1. S'il vous plaît ok? Joli s'il vous plaît?)
la source
Soit t1 et t2 des entiers distincts qui représentent deux fois écrits au format AAAAMMJJ. Alors t1 <t2 implique que t2 est survenu après t1.
Vous perdez cet ordre avec le premier formatage DD et MM.
ISO est, IMO, le seul format sensible.
la source
feature_test_macros(7)
, comme avoir les_POSIX_C_SOURCE > 200809L
moyens de prendre en charge les fonctionnalités de POSIX.1-2008 ...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 commande les années et mois en premier, elle 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 la date, mais on peut affirmer que le format de la date suit le formatage présenté à l'utilisateur.
la source
Les commandes YYYYMMDD sont datées de la même manière que vous commandez des numéros: la partie la plus importante en premier. MMJJAAAA serait comme écrire "cent vingt trois" comme "vingt et cent trois".
Dans notre culture, nous avons une compréhension naturelle de MMDDYYYY car, en tant qu’humains, nous sommes conscients du temps et des années progressent lentement. Nous savons généralement de quelle année on est. Comme il est rare que l’année compte, l’année compte donc peu. 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 JJMMAAAA.
la source
Le tri a été mentionné, mais de loin la raison 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 de telles 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.
Jolie mise en forme est pour le côté client ou la composition.
la source
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 des fichiers, par exemple, par nom, mais ne permettent pas d’analyser des dates au format arbitraire à partir de noms de fichiers et de les trier.
la source
C'est une question de restriction. Imaginez les paramètres ANNÉE, MOIS et JOUR, au format AAAAMMJJ, chaque paramètre est plus restrictif que le précédent.
Donc, si vous voulez rechercher quelque chose qui s’est passé en 1970, vous pouvez le faire en recherchant une chaîne commençant par
"1970*"
, mais si vous vous souvenez du mois en cours, 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 d'une information moins spécifique (
"1970*"
) à une information plus spécifique ("19700523"
).la source
1970*
et197005*
représente la syntaxe générique "glob", vous pouvez rechercher un ensemble de dates MMDDYYYY en recherchant le glob*1970
ou05*1970
. Votre réponse pourrait implicitement supposer une contrainte supplémentaire que vous n'avez pas explicitement mentionnée, et pourrait être améliorée en expliquant votre hypothèse.C'est un format lisible par l'homme pour les entrées et les sorties, il n'est pas nécessairement stocké de cette façon.
Plus du tiers des langages de programmation ont été développés dans un pays dont l'anglais est la langue principale et la plupart des langages modernes adhèrent à une norme plus ou moins détaillée - la norme internationale pour les dates est ISO 8601 .
Plus d'infos: (TMI?)
Au fur et à mesure que le temps change, généralement vers l’avant, les jours augmentent d’abord, puis de mois en mois, d’années en dernier, il serait peut-être plus facile de comprendre si nous avions des dates décimales (et une heure décimale ), à mesure que le temps passe, leur nombre augmente. Il est tout 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 se soucie pas de la structure que vous voulez utiliser et la logique binaire est utilisée dans la plupart (mais pas dans la totalité des ordinateurs) - la base e a en fait l' économie de base la plus basse, mais n'est pas la plus efficace ni la plus facile pour une séquence complète .
Le format réel d'entrée et de sortie pour les dates varie selon les pays et est défini par la localisation , alors que AAAAMMJJ peut sembler être le plus logique et être ce à quoi vous êtes habitué. Ce n'est pas universel aujourd'hui, ni dans le passé pour plus longtemps, encore aujourd'hui, les chiffres romains sont couramment utilisés pour les dates .
Connaître l'année d'avance vous indique le nombre de jours dans l'année, la plus grande variation de durée qu'une année puisse subir. Il vous indique dès le départ le nombre de jours de chaque mois à suivre (pour la vérification des erreurs lors de la saisie), permettant l'entrée de la journée en premier pourrait devoir vous sauvegarder si l'année suivante n'était pas conforme à votre entrée - rendant éventuellement plus difficile la saisie accessible . . Il a également une importance en ce qui concerne le format du calendrier . Voir aussi le calendrier geek , avec ses étoiles décimales.
En ce qui concerne l'ordinateur, il est susceptible d'utiliser l' heure UNIX , le nombre de secondes écoulées depuis 00:00:00, heure universelle coordonnée (UTC), le jeudi 1er janvier 1970, où chaque jour est considéré 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. L' AIU considère une année comme une année julienne de 365,25 jours (31,5576 millions de secondes), sauf indication contraire.
la source
Une autre utilisation que j'ai vue de 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. Utiliser YYYYMMDD signifie alors que les comparaisons d’entiers (souvent une seule instruction machine) ont le même résultat que les comparaisons à la date représentée. Et cela imprime de manière modérément humaine. Et rien de tout cela n’exige de code ou de support spécial, dans aucun environnement de programmation traditionnel.
Si ce sont essentiellement ce que vous devez faire avec les dates et que vous devez en faire beaucoup, ce format est très attrayant.
Par comparaison, les dates dans les formats courants tels que JJ / MM / AAAA prennent 10 octets sous forme de chaînes de caractères ASCII. Les chaînes YYYYMMDD réduisent celui-ci à 8 et donnent l'avantage de "comparer les représentations a le même résultat que comparer les dates", mais même dans ce cas, la comparaison basée sur des chaînes est un caractère caractère par caractère plutôt qu'une comparaison entière.
la source
Pour la même raison, 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
enstrftime
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 l'instant.Date Unix (utilitaires de base GNU)
Sortie:
Python
sortie:
C
Sortie:
C ++
Sortie:
Javascript
Sortie:
SQLite
Sortie:
LibreOffice Calc
Gnumeric
OnlyOffice
Python + Numpy
Sortie:
Python + Pandas
Sortie:
Génie logiciel
apport.log
alternatives.log
cups / access.log
syslog
la source
Do 27. Sep 22:27:09 CEST 2018
Un autre avantage non mentionné jusqu'ici est que la quantification souhaitable (attribuer une valeur précise à la même plage générale de valeurs) est une opération simple, relativement simple et rapide.
Supposons que vous rédigiez un rapport résumant les événements actuels, tels que la somme et le nombre de ventes. La date et l'heure de la vente sont stockées sous la forme AAAAMMJJHHMISS. Il vous suffit de conserver les 8 caractères les plus à gauche (s'il s'agit d'une chaîne) ou de diviser un nombre entier (le plancher par exemple) de 1 000 000 pour réduire votre date / heure au jour de la vente.
De même, si vous voulez les ventes du mois, vous ne gardez que les 6 chiffres les plus à gauche, ou vous divisez par 100 000 000.
Bien sûr, vous pouvez affirmer que toute manipulation de chaîne est possible, une date-heure pour les ventes de "12-25-2018 12:34 pm" pourrait être sous-traitée et manipulée plusieurs fois pour obtenir le mois et l'année. Sous forme numérique, 122520181234 pourrait être divisé et modifié, multiplié et divisé, et éventuellement produit également un mois et un an .. ..mais le code serait vraiment difficile à écrire, lire, maintenir et comprendre ..
Et même les optimiseurs de bases de données sophistiqués pourraient ne pas être en mesure d'utiliser un index sur une colonne pour une clause where si le formulaire de date était MM / JJ / AAAA, mais découpé et reconstitué. À titre de comparaison, stocker une représentation AAAAMMJJ et vouloir décembre 2018 mènent à des clauses où il est très facile d'utiliser un index
dateasstring LIKE '201812%'
oudateasint BETWEEN 20181200 and 20181299
quelque chose comme un index.Ainsi, s’il n’existait pas de type de données dédié pour les dates et que la représentation sous forme de chaîne / numérique était le seul choix possible, utiliser et stocker les heures dans une représentation du plus long intervalle sur la gauche vers l’intervalle le plus court sur right présente de nombreux avantages pour la compréhension, la manipulation, le stockage, la récupération et la maintenance du code
la source