C'è qualche motivo tecnico per cui, nella programmazione, il formato data predefinito è AAAAMMGG e non qualcos'altro?


118

C'è qualche ragione ingegneristica perché è così? Nel caso di un RDBMS mi chiedevo che avesse a che fare con le prestazioni, dal momento che un "ANNO" è più specifico di un "MESE", ad esempio: hai solo un anno 2000, ma ogni anno ha "Gennaio", che renderebbe più semplice / veloce filtrare / ordinare qualcosa per primo anno, ed è per questo che l'anno viene per primo.

Ma non so se abbia davvero senso ... C'è qualche motivo?


14
@IMil Potrebbe non piacerci, ma abbastanza spesso vengono memorizzati come stringhe.
Honza Brabec,

14
@candied_orange Sarebbe strano, soprattutto nel caso delle date.
glglgl,


19
Come nota a margine, questo formato non è quello alieno. Ad esempio, in lingua ungherese (e probabilmente anche alcuni altri) AAAA. MM. DD. è il formato data scritto predefinito ed è passato molto tempo dai computer.
Neinstein,

31
In programmazione, il formato data predefinito è "AAAAMMGG"? Sarebbe bello se fosse vero, ma sicuramente non è così dappertutto. RFC 822 e RFC 850, così come ANSI C asctime, sono ancora ampiamente utilizzati in molti luoghi. È bello che RFC 3339 e ISO 8601 stiano gradualmente sostituendo i formati più vecchi, e sono sicuramente ciò che dovrebbe essere usato in futuro. Più in generale, direi che la forma base ISO 8601 (semplice AAAAMMGG senza caratteri di separazione) è in realtà meno comune di altre forme, come AAAA-MM-GG.
Daniel Pryden,

Risposte:


386

In questo modo, le date possono essere facilmente ordinate come stringhe utilizzando le regole di ordinamento predefinite (es. Ordinamento lessicografico ).

Questo è anche il motivo per cui sia il mese che il giorno sono specificati usando due cifre (aggiungendo uno zero iniziale se necessario).

In realtà è uno dei formati di data definiti da ISO 8601 . Tale standard definisce anche un formato di data e ora 2015-03-27T15:26:40Z, che è anche ordinabile come stringhe.

Tuttavia, AAAAMMGG ha un vantaggio di rendere possibile la facile (nessun sottostringhe o sostituzioni di caratteri coinvolte) analizzare la stringa come un numero intero, e ancora usare ordinamento predefinito su interi.


90
@lucaswxp: se scrivi un confronto in casi speciali per stringhe seguendo uno schema specifico, puoi ovviamente renderlo barocco come desideri. La cosa qui è che lo schema è progettato in modo tale che anche l'ordine lessicale (oltre all'ordine lessicale consapevole del numero) sia un ordine logico, quindi non è necessario personalizzarlo.
Deduplicatore,

19
@lucaswxp La stringa della data potrebbe non essere in memoria. Esempio pratico: hai già un file CSV ordinato per data ISO e milioni + di righe all'anno. E vuoi restituire solo le righe tra determinate date. Puoi leggere il file riga per riga (riga per riga) fino a raggiungere la tua prima data, quindi caricare le righe in memoria fino a raggiungere la tua ultima data. Puoi saltare il resto del file. Ma se si salva la data come un altro formato o si ordina solo per anno, è necessario leggere l'intero record di dati prima di chiudere il file.
Tom A. Vibeto,

48
Si noti che i trattini sono opzionali in ISO 8601, quindi AAAAMMGG è ISO 8601.
Martin Ba

32
@Benoit È stata già fatta una proposta per risolvere il problema Y10K. Se stiamo ancora usando la stessa era, andremo a AAAAAAMMGG fino a Y100K, che sarà OGNI AAAAMMGG, AAAAAAMMGG, AAAAAAMMGG, AAAAAAMMGG. Questo prefisso alfa leader assicura il corretto ordinamento (a condizione che "A0YYYY ..." ecc. Siano rappresentazioni non valide se vengono ancora utilizzate le date AAAA ...). Ad un certo punto in cui il numero di cifre dell'anno sarà divisibile per tre, inizieremo ad aggiungere tre cifre ogni volta che cambiamo il prefisso alfa, per assicurarci di non rimanere senza lettere prima della morte per calore dell'universo.
Monty Harder,

35
È importante notare che con questo formato, l'ordinamento non è solo "più semplice". L'ordinamento lessicale (basato sul carattere) diventa equivalente all'ordinamento temporale, il che significa che è possibile ordinare temporaneamente senza analizzare .
jpmc26,

135

Non ancora menzionato, ma si passa rapidamente all'ordine all'interno di AAAA. Sono già millenni, secoli, decenni, anni. Vale a dire, YYYY è già ordinato dal periodo più lungo al periodo più breve. Lo stesso vale per MM e DD, è così che funziona il sistema numerico.

Quindi, per mantenere l'ordine tra i campi coerente con l'ordine all'interno dei campi, l'unica opzione è AAAAMMGG.

Come notarono zahbaz e Arseni Mourzenko, i formati AAAAMMGG si ordinano facilmente. Questa non è una coincidenza fortunata, è una conseguenza diretta di mettere i campi per la durata più lunga al primo posto (e mantenere la lunghezza fissa; stiamo introducendo un problema Y10K qui.)


34
Mentre potresti scherzare, questo codice potrebbe seriamente perseguitarci in 8000 anni. Il codice vive più a lungo di quanto tutti si aspettino ... 😓
ingannare il

15
@deceze ISO8601 ha già disposizioni per un anno a 5 cifre, ma sarebbe interessante vedere quali implementazioni di DateTime lo consentono attualmente.
Zac Faragher,

4
@ZacFaragher, sono sicuro che avremo un sacco di tempo per implementarlo in seguito, non c'è bisogno di affrettarsi, giusto ...?
ilkkachu,

51
@deceze Perché mi hai scongelato: hai capito come curare il cancro? No, è l'anno 9999 e conosci COBOL.
user3067860,

6
Potresti voler correggere il tuo errore di battitura. La parola millenni , il plurale di millennio , è obbligatoriamente scritta con una doppia N per abbinare la doppia N in annuale dal latino annus per anno. Quando si errori ortografici con un solo-N, che ora corrisponde infelicemente single-N di anale dal latino ano con lo stesso significato che il suo prestito linguistico in sport inglese. In breve, devi sempre scriverlo in un modo che significa che stai parlando di migliaia di anni, non di migliaia di buchi di testa. :)
tchrist,

57

C'è qualche motivo?

Sì. Quei software utilizzeranno ISO 8601 .

ISO 8601 presenta numerosi vantaggi rispetto ad altri formati di data:

  • È uno standard con un documento di specifica :)
  • È inequivocabile. mm / gg / aaaa e gg / mm / aaaa possono creare confusione a meno che non sia trascorso il 13 ° giorno.
  • Ordina lessicograficamente in ordine di tempo crescente, quindi non è richiesta alcuna logica di ordinamento della data. Ciò è particolarmente utile nei nomi di file, dove l'ordinamento dei numeri lessicografici è spesso fonte di confusione (ad es 1_file, 10_file, 2_file.).
  • Indica un anno a 4 cifre e zero mesi e mesi imbottiti. Ciò evita il problema dell'anno 2000 e altre ambiguità.

Per quanto riguarda il motivo per cui ISO 8601 esiste in primo luogo, è perché le persone trovavano i formati di data ambigui e confusi quando si scambiavano dati tra paesi / sistemi e avevano bisogno di qualcosa di non ambiguo.

Per la motivazione vedi l' introduzione delle specifiche .

Sebbene le raccomandazioni e gli standard ISO in questo campo siano disponibili dal 1971, diverse forme di rappresentazione numerica di date e orari sono state di uso comune in diversi paesi. Laddove tali rappresentazioni vengono scambiate attraverso i confini nazionali, si può verificare un'errata interpretazione del significato dei numeri, causando confusione e altri errori o perdite conseguenti. Lo scopo di questo standard internazionale è di eliminare il rischio di interpretazioni errate ed evitare la confusione e le sue conseguenze.

...

Questo standard internazionale conserva le espressioni più comunemente utilizzate per la data e l'ora del giorno e le loro rappresentazioni dai precedenti standard internazionali e fornisce rappresentazioni uniche per alcune nuove espressioni utilizzate nella pratica. La sua applicazione nello scambio di informazioni, in particolare tra i sistemi di elaborazione dei dati e le apparecchiature associate, eliminerà gli errori derivanti dall'errata interpretazione e i costi che questi generano. La promozione di questo standard internazionale non solo faciliterà lo scambio attraverso i confini internazionali, ma migliorerà anche la portabilità del software e faciliterà i problemi di comunicazione all'interno di un'organizzazione, nonché tra le organizzazioni.

Lo standard definisce variazioni "di base" come minimizzare l'uso di delimitatori. Quindi, YYYYMMDDè l' alternativa di base al formato esteso YYYY-MM-DD.


4
Non sapevo che ISO 8601 consentisse anche AAAAMMGG oltre a AAAA-MM-GG.
keuleJ

iso.org/iso-8601-date-and-time-format.html sembra indicare che il "Formato esteso" di AAAA-MM-GG è l'unico formato per 8601?
Oskar Austegard,

3
@keuleJ Ridurre al minimo l'uso di delimitatori come AAAAMMGG anziché AAAA-MM-GG è chiamato variazione del formato "base" nello standard ISO 8601.
Basil Bourque,

Altri due vantaggi della ISO 8601: (a) Facile da analizzare per macchina senza carattere SPACE e senza testo localizzato, e (b) Facile da intuire dagli umani attraverso le culture con l'anno che viene per primo facile da riconoscere (se contemporaneo), e senza assumere la lingua inglese.
Basil Bourque,

55

È perché tutti gli altri modi per farlo sono ambigui.

01/02/2003 cosa significa? Secondo gennaio 2003? O in Europa: 1 febbraio 2003? Peggio ancora se usi due cifre per l'anno, come il 01/02/03.

Ecco perché usi YYYYMMDD, è la convenzione che ci consente di comunicare chiaramente sulle date, 20030201 poiché una data è sempre chiara. (e semplifica l'ordinamento)

(Ora non andare a memorizzarlo come intero 20 milioni 30 mila 2 cento e 1. per favore ok? Carino per favore?)


14
"20030201 come data è sempre chiara" : Non è assolutamente così. È altrettanto ambiguo di "01/02/2003" a meno che non si sappia che AAAAMMGG (o è AAAAMMGG o GGGMMAAA? ...) è il formato utilizzato. Devi SEMPRE conoscere il formato della data; non esiste una "convenzione" che renda le cose inequivocabili.
skomisa,

6
@skomisa che è abbastanza errato. ISO 8601 ha definito il formato data standard internazionale specificamente per i motivi indicati. Nessuno degli altri formati è formato di data valido e non esiste dal 19880605
K. Alan Bates,

11
@ K.AlanBates La tua data è ambigua a meno che non ipotizziamo che debba essere analizzata secondo ISO 8601.
Goyo

16
20030201 è il 20 marzo 201AD, giusto?
David Richerby,

10
@Martijn, ma specifico della lingua. In Turchia, è Şubat piuttosto che febbraio (prima di pensare che il tuo codice funzioni, controlla sempre la Turchia ).
NH.

19

Sia t1 e t2 numeri interi distinti che rappresentano due volte scritti nella formattazione AAAAMMGG. Quindi t1 <t2 implica che t2 si è verificato dopo t1.

Si perde questo ordine con la prima formattazione DD e MM.

ISO è, IMO, l'unico formato sensibile.


1
Tranne il fatto che non lo avresti mai memorizzato come un numero intero, almeno non l'ho mai visto né considerato.
pipe

5
@pipe: Credimi, alcune persone lo farebbero. Manteniamo un sistema legacy che memorizza AAAAMMGG come numeri interi. Il progetto probabilmente ebbe origine in un vecchio sistema di database senza un tipo di data esplicito ed è stato mantenuto per compatibilità con le versioni precedenti. Non è carino. Non farlo
Heinzi,

19
@pipe è stata la mia esperienza nel settore del software che ogni volta che una persona ragionevole vorrebbe dire "Ma non faresti mai X" c'è sempre almeno un contro esempio
Joseph Rogers,

5
@pipe Nel data warehousing non è raro usare un numero intero yyyymmdd come chiave primaria / surrogata per una tabella di date.
Soapygopher,

4
@pipe, beh, il numero di sequenza di una zona DNS è un numero intero a 32 bit, che deve essere aumentato quando la zona cambia. Mentre potrebbe essere solo un numero semplice, un linguaggio comune è usare numeri come 2018092601 ... Quindi ci sono alcune curiose definizioni di numeri magici in descritte in feature_test_macros(7), come avere _POSIX_C_SOURCE > 200809Lmezzi che supportano le funzionalità di POSIX.1-2008 ...
ilkkachu,

12

Un punto non menzionato è che, negli input interattivi, questo formato consente di controllare l'input.

Il sistema non può sapere se un mese ha 28, 29, 30 o 31 giorni senza conoscere l'anno e il mese specifici. Quando gli input interattivi impongono quell'anno e quel mese prima, può verificare se il giorno (inserito per ultimo) è compreso nell'intervallo consentito.

Certo, la domanda riguardava in gran parte il formato della data, ma si può sostenere che il formato della data segue la formattazione presentata all'utente.


7

AAAAMMGG le date degli ordini nello stesso modo in cui ordini i numeri: prima la parte più significativa. MMDDYYYY sarebbe come scrivere "centoventitre" come "venti e centotre".

Nella nostra cultura, abbiamo una comprensione naturale di MMDDYYYY perché, come esseri umani, abbiamo una consapevolezza del tempo e gli anni procedono lentamente. Sappiamo generalmente che anno è. Vedere raramente l'anno conta, quindi lo spingiamo indietro. I mesi cambiano abbastanza velocemente da mantenere la loro importanza. Altre culture lo gestiscono in modo diverso. Gran parte del mondo preferisce GGMMAAAA.


62
Potresti voler riformulare la "nostra cultura" perché nella mia cultura è DDMMYYYY quindi non è la "nostra" cultura solo la tua
slebetman

66
Mappa completa di tutti i paesi che utilizzano il formato data MMDDYYYY img-9gag-fun.9cache.com/photo/a2mXmGd_700b.jpg
Peregrine

9
Sembra uno strano argomento: "I mesi cambiano abbastanza in fretta da mantenere la loro importanza" -> Perché non dare il primo giorno perché i cambiamenti cambiano ancora più velocemente?
Wim Deblauwe,

7
@JoelCoehoorn, è facile renderlo esplicito ("Nella nostra cultura americana"). "nostro" / "noi" è spesso usato per indicare "la comunità di scambio di stack" qui.
AnoE

14
Esattamente. Stackoverflow è internazionale . Il fatto che tu sia residente negli Stati Uniti non dice, implica o rende ancora più probabile che lo siano anche gli altri. Non puoi fare alcuna supposizione sulla località dei tuoi lettori qui, sono in tutto il mondo. E la maggior parte dei tuoi lettori non sarai né tu né il PO, ma altre persone che troveranno la tua risposta su Google. Questo commento è scritto in un continente diverso da quello in cui ti capita di vivere. E mentre abbiamo le nostre abitudini - ehm - interessanti , sicuramente non usiamo MM / GG / AAAA qui ...
cmaster

6

L'ordinamento è stato menzionato ma la ragione di gran lunga più utile per farlo è confrontarli come "stringhe", e sì un timestamp di 26 caratteri è ordinato in modo simile.

Sono consapevole che tali confronti sono essenziali per l'ordinamento, ma è generalmente utile per un ordinamento a 2 elementi.

Ho lavorato su progetti in cui questo non è stato adottato, e sì, i programmatori hanno provato (con risultati contrastanti) a confrontare le date come stringhe.

La formattazione graziosa è per il lato client o la composizione.


5

Questo formato rende l'ordine alfabetico delle stringhe identico all'ordine cronologico delle date. Ciò è utile perché molti strumenti forniscono l'ordinamento alfabetico, ad esempio, dei file per nome, ma non c'è modo di analizzare le date formattate arbitrariamente dai nomi dei file e ordinarle per quelle.


4

Si tratta di restrittività. Immagina ANNO, MESE e GIORNO come parametri, nel formato AAAAMMGG ogni parametro è più restrittivo di quello precedente.

Quindi, se vuoi cercare qualcosa che è accaduto nel 1970, puoi farlo cercando una stringa che inizia da "1970*", ma se ricordi quale mese è stato puoi aggiungere il mese come "197005*". In questo modo ogni "parametro" della data fornisce informazioni più specifiche.

È l'unico modo per passare da informazioni meno specifiche ( "1970*") a informazioni più specifiche ( "19700523").


3
Non è proprio un grande argomento - è altrettanto comune cercare cose che accadono in mesi specifici piuttosto che in anni specifici.
Cubico

1
Se 1970*e 197005*rappresentano la sintassi jolly "glob", è possibile cercare un gruppo di date MMDDYYYY cercando il glob *1970o 05*1970. La tua risposta potrebbe assumere implicitamente qualche vincolo extra che non hai menzionato esplicitamente e potrebbe essere migliorata spiegando la tua ipotesi.
Quuxplusone,

3
Questo è una sorta di effetto collaterale o un altro modo di descrivere l'ordine delle chiavi di ordinamento menzionato da altre risposte. Ma questa spiegazione cade a meno che non la limiti alla ricerca di prefissi. (Più facile da indicizzare, ma non necessario).
Peter Cordes,

Significa anche che puoi selezionare una sequenza di date con regexp relativamente semplice ...
Harper,

1

Perché, nella programmazione, il formato data predefinito è AAAAMMGG ...

È un formato leggibile dall'uomo per input e output, non è necessariamente memorizzato in questo modo.

Oltre un terzo di tutti i linguaggi di programmazione sono stati sviluppati in un paese con l'inglese come lingua principale e la maggior parte di quelli moderni aderisce a uno standard di alcune descrizioni - lo standard internazionale per le date è ISO 8601 .

Maggiori informazioni: (TMI?)

Quando il tempo cambia, di solito in avanti, i giorni aumentano prima, poi mesi, infine anni - potrebbe essere più facile capire se avessimo date decimali (e tempo decimale ) - col passare del tempo il numero aumenta. È semplicemente più facile per gli umani guardare il numero e confrontarlo con un'altra data a colpo d'occhio.

Al computer non importa quale struttura si desidera utilizzare e nella maggior parte (ma non in tutti ) i computer viene utilizzata la logica binaria - base e ha in realtà l' economia radix più bassa ma non è la più efficiente né la più semplice per una sequenza completa .

Il formato di input e output effettivo per le date varia in base al Paese e viene impostato in base alla localizzazione , mentre AAAAMMGG potrebbe sembrare più sensato ed essere ciò a cui sei abituato oggi non è universale , né lo era in passato per il tempo più lungo, eppure anche oggi i numeri romani sono comunemente usati per le date .

Conoscere l'anno in anticipo indica il numero di giorni in un anno, la più grande variazione di durata che un anno può subire. Ti dice in anticipo il numero di giorni in ogni mese da seguire (per il controllo degli errori durante l'immissione), consentendo l'inserimento del giorno prima potrebbe essere necessario eseguirne il backup se l'anno successivo non fosse d'accordo con il tuo input - probabilmente rendendo più difficile l' accesso accessibile . Ha anche importanza per quanto riguarda il formato del calendario . Vedi anche il calendario geek , con le sue stelle decimali.

Per quanto riguarda il computer, è probabile che utilizzi il tempo di UNIX Epoch , il numero di secondi che sono trascorsi dalle 00:00:00 Coordinated Universal Time (UTC), giovedì 1 gennaio 1970, dove ogni giorno viene trattato come se contenesse esattamente 86400 secondi. Vedi anche il giorno giuliano . Il formato AAAAMMGG è semplicemente preferito dagli esseri umani egocentrici, la IAU considera un anno come un anno giuliano di 365,25 giorni (31,5576 milioni di secondi) se non diversamente specificato.


1
In realtà quasi ogni essere umano e software che abbia mai incontrato preferisce qualche altro formato.
Goyo,

1
Piacere di conoscerti! Sono Dave, e preferisco YYYYMMDD
Reversed Engineer

0

Un altro uso che ho visto per questa rappresentazione è che puoi archiviare le date come numeri interi (cioè in un database), usando solo 4 byte per data. L'uso di AAAAMMGG significa quindi che i confronti di numeri interi (spesso una singola istruzione macchina) hanno lo stesso risultato dei confronti alla data rappresentata. E stampa in modo moderatamente umano-leggibile. E nulla di tutto ciò richiede alcun codice o supporto speciale, in qualsiasi ambiente di programmazione tradizionale.

Se quelle cose sono la maggior parte di ciò che devi fare con le date e devi farlo molto, allora questo formato ha molto fascino.

In confronto, le date in formati comuni come GG / MM / AAAA prendono 10 byte come stringhe di caratteri ASCII. Le stringhe AAAAMMGG riducono tale valore a 8 e ottengono il vantaggio "il confronto delle rappresentazioni ha lo stesso risultato del confronto delle date", ma anche in questo caso il confronto basato su stringhe è carattere per carattere anziché un singolo confronto intero.


2
È banale impacchettare una data in tre byte. L'intervallo 0000 ~ 9999 richiede 14 bit, 01 ~ 12 richiede 4 bit e 01 ~ 31 richiede 5 bit, per un totale di 23 bit. Utilizzando anche il bit rimanente in una quantità di tre byte, è possibile rappresentare le date per un periodo di 32.768 anni mantenendo una risoluzione di un giorno. Questo potrebbe essere usato, ad esempio, per consentire di rappresentare date nell'intervallo compreso tra l'8191 a.C. e il 24576 d.C. Impacchettando i bit come, diciamo, yyyyyyyyyyyyyyymmmmddddd, la rappresentazione decimale rimane direttamente comparabile (anche se non direttamente leggibile dall'uomo, ma chi se ne frega nella memoria fisica del database?).
un CVn il

0

Stessa ragione per cui la Luna è fatta di formaggio verde: non lo è. Nella maggior parte dei casi il formato predefinito è una sorta di stringa localizzata. A volte viene utilizzato il formato ISO, ma di solito con trattini per una migliore leggibilità. YYYYMMDD(o %Y%m%din strftimeparlance) è raramente il valore predefinito. Ad essere sinceri, sono sicuro di averlo visto, ma non riesco a pensare a un esempio in questo momento.

Data Unix (utility GNU core)

date

Produzione:

Wed Sep 26 22:20:57 CEST 2018

Pitone

import time
print(time.ctime())

produzione:

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

Produzione:

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

Produzione:

Wed Sep 26 22:51:22 2018

Javascript

current_date = new Date ( );
current_date;

Produzione:

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

SQLite

SELECT date('now');

Produzione:

2018-09-26

LibreOffice Calc

inserisci qui la descrizione dell'immagine

gnumeric

inserisci qui la descrizione dell'immagine

onlyoffice

inserisci qui la descrizione dell'immagine

Python + numpy

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

Produzione:

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

Python + panda

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

Produzione:

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

Ingegneria software

inserisci qui la descrizione dell'immagine

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

tazze / 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
per aggiungere al tuo argomento, quanti di questi sono formattati in quel modo a causa delle impostazioni dell'utente sul computer su cui hai eseguito lo script?
Topher Brink,

Il primo in realtà non è "bash", è il programma della data (e viene pubblicato Do 27. Sep 22:27:09 CEST 2018qui.)
Paŭlo Ebermann,

@ PaŭloEbermann Hai ragione, spero sia meglio adesso. Come ho già detto, molti di questi formati sono localizzati, quindi il formato effettivo visualizzato dipenderà dalle opzioni di localizzazione.
Goyo,

3
Mentre il punto di questa risposta è vero per le app orientate all'utente finale, non così per lo scambio di dati tra sistemi, serializzazione dei dati, protocolli di messaggi / dati, registrazione, traccia, debugger e così via. Lo standard ISO 8601 sta rapidamente diventando la norma per tali usi rivolti agli amministratori di sistema e ai programmatori. Idem per scenari internazionali o locali.
Basil Bourque,

@BasilBourque Grazie, ho aggiunto un campione casuale dei registri che ho trovato nel mio sistema. Non ho esempi di altri tipi a portata di mano. Ma non penso che una tendenza verso il default a ISO 8601 in domini specifici renda la sua variante di base "il default in programmazione" di fronte alla grande quantità di software che passa ad altri formati.
Goyo,

-1

Un ulteriore vantaggio non menzionato finora è che la quantizzazione desiderabile (assegnando un valore preciso come appartenente allo stesso intervallo generale di valori) è un'operazione singola relativamente semplice e veloce.

Supponiamo di scrivere un rapporto che sintetizzi gli eventi oggi, come la somma e il numero delle vendite. La data e l'ora di vendita sono memorizzate come AAAAMMGGHHISS, è sufficiente mantenere gli 8 caratteri più a sinistra (se si tratta di una stringa) o la divisione intera (ovvero il piano) di 1.000.000 per ridurre il datetime al giorno della vendita.

Allo stesso modo, se desideri le vendite del mese, mantieni solo le 6 cifre più a sinistra o dividi per 100.000.000

Certo, potresti sostenere che è possibile qualsiasi manipolazione di stringhe, un datetime per le vendite di "12-25-2018 12:34 pm" potrebbe essere sottoposto a substring e manipolato più volte per ottenere il mese e l'anno. In forma numerica 122520181234 potrebbe essere diviso e modificato, e moltiplicato, e diviso ancora un po ', e alla fine potrebbe anche produrre un mese e un anno .. ..ma il codice sarebbe davvero difficile da scrivere, leggere, mantenere e capire ..

E anche sofisticati ottimizzatori di database potrebbero non essere in grado di utilizzare un indice su una colonna per una clausola where se il modulo della data era MM / GG / AAAA ma tagliato e ricostruito insieme. In confronto, la memorizzazione di una rappresentazione AAAAMMGG e il desiderio di dicembre 2018 portano a dove clausole delk dateasstring LIKE '201812%'o dateasint BETWEEN 20181200 and 20181299- qualcosa per cui un indice può essere facilmente utilizzato

Pertanto, se non esistesse un tipo di dati dedicato per le date e la rappresentazione stringa / rappresentazione numerica fosse l'unica scelta, utilizzare e memorizzare i tempi in alcune rappresentazioni dell'intervallo più lungo-da-sinistra-a-breve-intervallo-su-the- right ha alcuni vantaggi per la facilità di comprensione, manipolazione, archiviazione, recupero e manutenzione del codice

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.