Y at-il une raison technique pour laquelle, en programmation, le format de date par défaut est AAAAMMJJ et pas autre chose?


118

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?


14
@IMil Cela peut ne pas nous plaire, mais ils sont souvent stockés sous forme de chaînes.
Honza Brabec

14
@candied_orange Ce serait étrange, surtout dans le cas des dates.
Glglgl


19
En remarque, ce format n'est pas si étrange. Par exemple, en hongrois (et probablement quelques autres aussi) YYYY. MM. DD. est le format de date écrit par défaut et a été mis longtemps avant les ordinateurs.
Neinstein

31
En programmation, le format de date par défaut est "AAAAMMJJ"? Ce serait bien si cela était vrai, mais ce n'est certainement pas le cas partout. Les RFC 822 et RFC 850, ainsi que les C ANSI 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.
Daniel Pryden

Réponses:


386

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.


90
@lucaswxp: Si vous écrivez une comparaison de cas particuliers pour les chaînes suivant un schéma spécifique, vous pouvez bien sûr le rendre aussi baroque que vous le souhaitez. Le problème ici est que le schéma est conçu de telle sorte que l'ordre lexical (ainsi que l'ordre lexical tenant compte des nombres) soit également un ordre logique, sans qu'il soit nécessaire de le personnaliser.
Déduplicateur

19
@lucaswxp Votre chaîne de date peut ne pas être en mémoire. Exemple pratique: vous avez déjà un fichier csv trié par date ISO et plusieurs millions de lignes par an. Et vous voulez renvoyer uniquement les lignes entre certaines dates. Vous pouvez lire le fichier ligne par ligne (ligne par ligne) jusqu'à la première date, puis charger les lignes en mémoire jusqu'à la dernière date. Vous pouvez ignorer le reste du fichier. Mais si vous enregistrez la date sous un autre format, ou si vous triez par année uniquement, vous devrez lire toute l’année des enregistrements avant de fermer le fichier.
Tom A. Vibeto

48
Notez que les tirets sont facultatifs dans la norme ISO 8601, de sorte que YYYYMMDD est la norme ISO 8601.
Martin Ba

32
@Benoit Une proposition a déjà été faite pour résoudre le problème Y10K. Si nous utilisons toujours la même époque, nous passerons à AYYYYYMMDD jusqu'à Y100K, qui sera BYYYYYYMMD, CYYYYYYYYMM, DYYYYYYYYMMDD, EYYYYYYYYYMMD. Ce préfixe alpha initial garantit un ordre de tri correct (à condition que "A0YYYY ...", etc., soient des représentations non valides si des dates YYYY ... sont toujours utilisées). À un moment donné, lorsque le nombre de chiffres de l'année est divisible par trois, nous commençons par en ajouter trois à chaque changement de préfixe alpha, afin de ne pas manquer de lettres avant la mort de l'univers par la chaleur.
Monty Harder

35
Il est important de noter qu'avec ce format, le tri n'est pas simplement "plus facile". La sorte lexicale (basée sur les caractères) devient équivalente à la sorte temporelle, ce qui signifie que vous pouvez trier temporellement sans analyse .
jpmc26

135

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


34
Même si vous plaisantez, ce code pourrait bien nous hanter dans 8000 ans. Le code vit plus longtemps que tout le monde s'y attend… dec
deceze

15
@deceze ISO8601 contient déjà des dispositions pour une année à 5 chiffres, mais il serait intéressant de voir quelles implémentations DateTime le permettent actuellement.
Zac Faragher

4
@ZacFaragher, je suis sûr que nous aurons tout le temps nécessaire pour mettre cela en œuvre plus tard, inutile de vous presser, pas vrai?
ilkkachu

51
@deceze Pourquoi m'as-tu décongelé - as-tu découvert comment guérir le cancer? Non, nous sommes en 9999 et vous connaissez le langage COBOL.
user3067860

6
Vous voudrez peut-être corriger votre faute de frappe. Le mot millénaire , pluriel de millénaire , est obligatoirement orthographié par un double N pour correspondre au double N annuel en latin annus . Lorsque vous l'orthographiez mal avec un seul N, il correspond malheureusement avec le seul N de l' anus du latin anus avec le même sens que son emprunt dans le sport anglais. En bref, vous devez toujours l'épeler de manière à ce que vous parlez de milliers d'années, pas de milliers de trous. :)
tchrist

57

Y a-t-il une raison du tout?

Oui. Ces logiciels utiliseront l’ ISO 8601 .

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

  • C'est un standard avec un document de spécification :)
  • C'est sans ambiguïté. mm / jj / aaaa et jj / mm / aaaa peuvent prêter à confusion à moins que le 13e jour ne soit écoulé.
  • Il effectue le tri lexicographique en ordre chronologique croissant, de sorte qu'aucune logique spéciale de tri par date n'est requise. Ceci est particulièrement utile dans les noms de fichiers, où le tri des nombres lexicographiques est souvent source de confusion (par exemple 1_file, 10_file, 2_file).
  • Il impose une année à 4 chiffres et un mois et une année sans marge. Cela évite le problème de l'an 2000 et d'autres ambiguïtés.

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 .

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 survenir, entraînant une confusion et d’autres erreurs ou pertes consécutives. La présente Norme internationale a pour objet d’éliminer le risque d’interprétation erronée 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 et leurs représentations issues des précédentes Normes internationales et fournit des représentations uniques pour certaines nouvelles expressions utilisées dans la pratique. Son application à l’échange d’informations, en particulier entre les systèmes de traitement de 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 les échanges internationaux, mais améliorera également la portabilité des logiciels et facilitera les problèmes de communication au sein d’une organisation, ainsi qu’entre organisations.

La norme définit les variations «de base» comme minimisant l’utilisation de délimiteurs. Alors, YYYYMMDDest l' alternative de base au format étendu YYYY-MM-DD.


4
Je ne savais pas qu'ISO 8601 autorisait également AAAAMMJJ en plus de AAAA-MM-JJ.
keuleJ

iso.org/iso-8601-date-and-time-format.html semble indiquer que le "format étendu" de AAAA-MM-JJ est le seul format pour 8601?
Oskar Austegard le

3
@keuleJ Minimiser l'utilisation de délimiteurs tels que YYYYYMMDD plutôt que YYYY-MM-DD est appelé variation de format «de base» dans la norme ISO 8601.
Basil Bourque

Deux autres avantages de l'ISO 8601: (a) analyse facile à la machine, sans caractère SPACE ni texte localisé, et (b) facilité d'intuition pour les humains dans toutes les cultures, l'année précédant étant facilement reconnaissable (si elle est contemporaine), et sans assumer la langue anglaise.
Basil Bourque

55

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?)


14
"20030201 comme date est toujours claire" : Ce n'est absolument pas le cas. Il est aussi ambigu que "01/02/2003" à moins que vous ne sachiez que AAAAMMJJ (ou s'agit-il de AAAAJJMM ou JJMMAAAA? ...) est le format utilisé. Vous devez TOUJOURS connaître le format de la date. il n'y a pas de "convention" qui rend les choses sans ambiguïté.
Skomisa

6
@skomisa c'est tout à fait incorrect. L'ISO 8601 a défini le format de date normalisé international spécifiquement pour les raisons que vous avez indiquées. Aucun des autres formats n'est valide et date depuis 19880605
K. Alan Bates

11
@ K.AlanBates Votre date est ambiguë sauf si nous supposons qu'elle devrait être analysée conformément à la norme ISO 8601.
Goyo le

16
20030201 est le 20 mars 201AD, non?
David Richerby

10
@Martijn, mais spécifique à la langue. En Turquie, il s'agit de atubat plutôt que de février (avant de penser que votre code fonctionne, vérifiez toujours la Turquie ).
NH.

19

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.


1
Sauf que vous ne stockeriez jamais ceci en tant qu'entier, du moins je ne l'ai jamais vu ni considéré.
pipe

5
@pipe: Croyez-moi, certaines personnes le feraient. Nous maintenons un système hérité qui stocke AAAAMMJJ en tant qu'entiers. La conception a probablement pour origine un ancien système de base de données sans type de date explicite et a été conservée pour des raisons de compatibilité ascendante. Ce n'est pas joli Ne le fais pas.
Heinzi

19
@pipe D'après mon expérience dans l'industrie du logiciel, chaque fois qu'une personne raisonnable voudrait dire "mais vous ne feriez jamais X", il y a toujours au moins un exemple de compteur
Joseph Rogers

5
@pipe Dans l'entreposage de données, il n'est pas rare d'utiliser un entier yyyymmdd comme clé primaire / de substitution pour une table de dates.
soapygopher

4
@pipe, eh bien, le numéro de séquence d'une zone DNS est un entier de 32 bits, qui doit être augmenté lorsque la zone change. Bien que cela puisse être un simple numéro, un idiome courant consiste à utiliser des nombres tels que 2018092601 ... Ensuite, il existe quelques curieuses définitions de nombres magiques décrites dans feature_test_macros(7), comme avoir les _POSIX_C_SOURCE > 200809Lmoyens de prendre en charge les fonctionnalités de POSIX.1-2008 ...
ilkkachu

12

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.


7

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.


62
Vous voudrez peut-être reformuler "notre culture" parce que dans ma culture, c'est DDMMYYYY, alors ce n'est pas "notre" culture mais la vôtre
slebetman

66
Carte complète de tous les pays utilisant le format de date MMJJAAAA img-9gag-fun.9cache.com/photo/a2mXmGd_700b.jpg
Peregrine

9
Cela ressemble à un argument étrange: "Les mois changent assez rapidement pour conserver leur importance" -> Pourquoi ne pas alors mettre la journée en premier, car cela change encore plus rapidement?
Wim Deblauwe

7
@JoelCoehoorn, il est facile de rendre cela explicite ("Dans notre culture américaine"). "notre" / "nous" est souvent utilisé pour signifier "la communauté stackexchange" ici.
AnoE

14
Exactement. Stackoverflow est international . Que vous soyez basé aux États-Unis ne dit pas, n'implique pas, ni même ne rend pas plus probable que les autres le soient aussi. Vous ne pouvez faire aucune hypothèse sur la localité de vos lecteurs ici, ils sont partout dans le monde. Et la plupart de vos lecteurs ne seront ni vous, ni l'OP, mais d'autres personnes qui trouveront votre réponse sur Google. Ce commentaire est écrit sur un autre continent que celui sur lequel vous vivez. Et bien que nous ayons - euh - des habitudes intéressantes , nous n'utilisons certainement pas le MM / JJ / AAAA ici ...
cmaster

6

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.


5

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.


4

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").


3
Ce n'est pas vraiment un argument formidable - il est tout aussi courant de rechercher des événements se produisant certains mois plutôt que des années spécifiques.
Cubique

1
Si 1970*et 197005*représente la syntaxe générique "glob", vous pouvez rechercher un ensemble de dates MMDDYYYY en recherchant le glob *1970ou 05*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.
Quuxplusone

3
C'est en quelque sorte un effet secondaire ou une autre façon de décrire l'ordre de clé de tri mentionné par d'autres réponses. Mais cette explication tombe en morceaux à moins que vous ne la limitiez à la recherche de préfixes. (Plus facile à indexer, mais pas obligatoire).
Peter Cordes

Cela signifie également que vous pouvez sélectionner une séquence de dates avec des expressions rationnelles relativement simples ...
Harper,

1

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

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.


1
En fait, presque tous les humains et les logiciels que j'ai rencontrés préfèrent un autre format.
Goyo

1
Ravi de vous rencontrer! Je suis Dave et je préfère AAAAMMJJ
Ingénieur inversé

0

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.


2
Il est trivial de placer une date sur trois octets. La plage 0000 ~ 9999 nécessite 14 bits, 01 ~ 12 nécessite 4 bits et 01 ~ 31 nécessite 5 bits, pour une somme de 23 bits. En utilisant également le bit restant dans une quantité de trois octets, vous pouvez représenter des dates sur une période de 32 768 ans en conservant une résolution d'un jour. Cela pourrait être utilisé, par exemple, pour permettre la représentation de dates comprises entre 8191 av. J.-C. et 24576 après JC. En regroupant les bits tels que, par exemple, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, la représentation décimale reste directement comparable (bien qu'elle ne soit pas directement lisible par l'homme, mais qui se soucie du stockage physique?).
un CVn

0

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%den strftimelangage) 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)

date

Sortie:

Wed Sep 26 22:20:57 CEST 2018

Python

import time
print(time.ctime())

sortie:

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

Sortie:

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

Sortie:

Wed Sep 26 22:51:22 2018

Javascript

current_date = new Date ( );
current_date;

Sortie:

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

SQLite

SELECT date('now');

Sortie:

2018-09-26

LibreOffice Calc

entrez la description de l'image ici

Gnumeric

entrez la description de l'image ici

OnlyOffice

entrez la description de l'image ici

Python + Numpy

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

Sortie:

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

Python + Pandas

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

Sortie:

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

Génie logiciel

entrez la description de l'image ici

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

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

10
Pour ajouter à votre argument, combien d'entre eux sont formatés de cette façon à cause des paramètres utilisateur sur l'ordinateur sur lequel vous avez exécuté le script?
Topher Brink

Le premier n'est pas vraiment "bash", c'est le programme de date (et il est Do 27. Sep 22:27:09 CEST 2018
affiché

@ PaŭloEbermann Vous avez raison, j'espère que c'est mieux maintenant. Comme je l'ai dit, bon nombre de ces formats sont localisés. Le format réel que vous voyez dépendra de vos options de localisation.
Goyo

3
Bien que le but de cette réponse soit vrai pour les applications orientées utilisateur final, il n'en va pas de même pour l'échange de données entre systèmes, la sérialisation de données, les protocoles de message / données, la journalisation, le traçage, les débogueurs, etc. La norme ISO 8601 devient rapidement la norme pour de telles utilisations destinées aux administrateurs système et aux programmeurs. Idem pour les scénarios internationaux ou agnostiques selon les paramètres régionaux.
Basil Bourque

@BasilBourque Merci, j'ai ajouté un échantillon aléatoire des journaux que j'ai trouvés dans mon propre système. Je n'ai pas d'exemples des autres types à portée de main. Mais je ne pense pas que la tendance à adopter la norme ISO 8601 dans certains domaines fasse de sa variante de base "la programmation par défaut" face à la grande quantité de logiciels qui utilisent par défaut d'autres formats.
Goyo

-1

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%'ou dateasint BETWEEN 20181200 and 20181299quelque 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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.