Existe alguma razão técnica para que, na programação, o formato de data padrão seja AAAAMMDD e não outra coisa?


118

Existe alguma razão de engenharia por que é assim? Eu estava pensando no caso de um RDBMS que tinha algo a ver com desempenho, pois um "ANO" é mais específico que um "MÊS", por exemplo: você só tem um ano de 2000, mas todos os anos tem "janeiro", o que tornaria mais fácil / rápido filtrar / classificar algo por ano primeiro e é por isso que o ano vem primeiro.

Mas não sei se isso realmente faz sentido ... Existe alguma razão?


14
@IMil Podemos não gostar, mas muitas vezes eles são armazenados como strings.
Honza Brabec 25/09

14
@candied_orange Isso seria estranho, especialmente no caso de datas.
glglgl


19
Como uma nota lateral, este formato não é que alienígena. Por exemplo, no idioma húngaro (e provavelmente em alguns outros também) AAAA. MILÍMETROS. DD. é o formato de data por escrito padrão e leva muito tempo para os computadores.
Neinstein 25/09

31
Na programação, o formato padrão da data é "AAAAMMDD"? Seria bom se isso fosse verdade, mas esse definitivamente não é o caso em todos os lugares. O RFC 822 e o RFC 850, assim como os C de ANSI asctime, ainda são amplamente utilizados em muitos lugares. É bom que o RFC 3339 e o ISO 8601 estejam gradualmente substituindo os formatos mais antigos, e eles certamente são o que deve ser usado daqui para frente. Em termos mais gerais, eu diria que o formulário básico da ISO 8601 (AAAAMMDD simples sem caracteres separadores) é na verdade menos comum do que alguns outros formatos, como AAAA-MM-DD.
Daniel Pryden 26/09/18

Respostas:


386

Dessa forma, as datas podem ser facilmente classificadas como cadeias usando as regras de classificação padrão (por exemplo, classificação lexicográfica ).

É também por isso que o mês e o dia são especificados usando dois dígitos (adicionando um zero à esquerda, se necessário).

Na verdade, é um dos formatos de data definidos pela ISO 8601 . Esse padrão também define um formato de data e hora 2015-03-27T15:26:40Z, que também pode ser classificado como strings.

No entanto, AAAAMMDD tem um benefício adicional de tornar possível (sem substrings ou substituições de caracteres envolvidas) analisar facilmente a sequência como um número inteiro e ainda usar a ordem padrão em números inteiros.


90
@lucaswxp: Se você escrever uma comparação de caso especial para seqüências de caracteres seguindo um esquema específico, é claro que poderá torná-la tão barroca quanto desejar. A questão aqui é que o esquema é projetado de tal forma que a ordem lexical (assim como a ordem com reconhecimento de número lexical) também é uma ordem lógica, portanto, não há necessidade de personalização.
Deduplicator

19
@lucaswxp Sua sequência de datas pode não estar na memória. Exemplo prático: você tem um arquivo csv já classificado por data ISO e mais de milhões de linhas por ano. E você deseja retornar apenas as linhas entre determinadas datas. Você pode ler o arquivo linha por linha (linha por linha) até chegar à sua primeira data e carregar as linhas na memória até chegar à sua última data. Você pode pular o restante do arquivo. Porém, se você salvar a data como outro formato ou classificar apenas por ano, será necessário ler o registro inteiro do ano inteiro antes de fechar o arquivo.
Tom A. Vibeto

48
Observe que os traços são opcionais na ISO 8601, portanto, AAAAMMDD é ISO 8601. #
Martin Ba

32
@Benoit Já foi feita uma proposta para resolver o problema do Y10K. Se ainda estivermos usando a mesma época, iremos para AYYYYYMMDD até Y100K, que será BYYYYYYMMDD, CYYYYYYMMDD, DYYYYYYYYMMDD, EYYYYYYYYMMDD. Esse prefixo alfa inicial garante a ordem de classificação correta (desde que "A0YYYY ..." etc. sejam representações inválidas se alguma data YYYY ... ainda for usada). Em um momento em que o número de dígitos do ano é divisível por três, começaremos a adicionar três dígitos cada vez que mudarmos o prefixo alfa, para garantir que não fiquemos sem letras antes da morte por calor do universo.
Monty Harder

35
É importante observar que, com esse formato, a classificação não é apenas "mais fácil". A classificação lexical (baseada em caracteres) torna-se equivalente à classificação temporal, o que significa que você pode classificar temporalmente sem analisar .
precisa saber é o seguinte

135

Ainda não mencionado, mas você rapidamente encurta o pedido dentro de AAAA. Isso já é milênios, séculos, décadas, anos. Ou seja, AAAA já está ordenado do período mais longo para o período mais curto. O mesmo vale para MM e DD, é assim que o sistema numérico funciona.

Portanto, para manter a ordem entre os campos consistente com a ordem dentro dos campos, a única opção é AAAAMMDD.

Como zahbaz e Arseni Mourzenko observaram, os formatos AAAAMMDD são classificados com facilidade. Não é uma coincidência de sorte, é uma consequência direta de colocar os campos pela maior duração primeiro (e manter o comprimento fixo; estamos introduzindo um problema Y10K aqui).


34
Embora você possa estar brincando, esse código pode vir a nos assombrar seriamente em 8000 anos. Código vive mais do que qualquer um espera ... dec
deceze 25/09/18

15
@deceze A ISO8601 já possui provisões para um ano de 5 dígitos, mas seria interessante ver quais implementações do DateTime atualmente permitem isso.
Zac Faragher 26/09/18

4
@ZacFaragher, tenho certeza de que teremos tempo de sobra para implementar isso mais tarde, não precisa se apressar, certo ...?
ilkkachu

51
@ deceze Por que você me descongelou - você descobriu como curar o câncer? Não, é o ano de 9999 e você conhece COBOL.
user3067860

6
Você pode corrigir seu erro de digitação. A palavra milênios , o plural de milênio , é obrigatoriamente escrita com um N duplo para coincidir com o N duplo no anual do latim annus por ano. Quando você digita incorretamente apenas um N, agora ele infelizmente combina o N único anal do ânus latino com o mesmo significado que sua palavra de empréstimo nos esportes ingleses. Em resumo, você sempre precisa soletrar de uma maneira que signifique que você está falando de milhares de anos, e não de milhares de buracos. :)
tchrist

57

Existe alguma razão?

Sim. Esses softwares usarão a ISO 8601 .

A ISO 8601 possui várias vantagens sobre outros formatos de data:

  • É um padrão com um documento de especificação :)
  • É inequívoco. mm / dd / aaaa e dd / mm / aaaa podem ser confusos, a menos que tenha passado o 13º dia.
  • Ele é dividido lexicograficamente em ordem crescente de tempo, portanto, nenhuma lógica especial de classificação de datas é necessária. Isso é especialmente útil em nomes de arquivos, onde a classificação numérica lexicográfica geralmente é confusa (por exemplo 1_file, 10_file, 2_file).
  • Ele exige ano de 4 dígitos e zero mês e ano preenchido. Isso evita o problema do ano 2000 e outras ambiguidades.

Quanto ao motivo pelo qual a ISO 8601 existe em primeiro lugar, é porque as pessoas acham os formatos de data ambíguos e confusos ao trocar dados entre países / sistemas e precisam de algo não ambíguo.

Para a justificativa, consulte a introdução das especificações .

Embora as recomendações e normas da ISO neste campo estejam disponíveis desde 1971, diferentes formas de representação numérica de datas e horas têm sido usadas em diferentes países. Quando essas representações são trocadas entre fronteiras nacionais, pode ocorrer uma interpretação incorreta da significância dos números, resultando em confusão e outros erros ou perdas consequentes. O objetivo desta Norma é eliminar o risco de erros de interpretação e evitar a confusão e suas conseqüências.

...

Esta Norma mantém as expressões mais usadas para data e hora do dia e suas representações das Normas Internacionais anteriores e fornece representações únicas para algumas novas expressões usadas na prática. Sua aplicação no intercâmbio de informações, especialmente entre sistemas de processamento de dados e equipamentos associados, eliminará erros decorrentes de erros de interpretação e os custos gerados. A promoção deste Padrão Internacional não apenas facilitará o intercâmbio entre fronteiras internacionais, mas também melhorará a portabilidade do software e facilitará os problemas de comunicação dentro de uma organização, bem como entre organizações.

O padrão define variações "básicas" como minimizar o uso de delimitadores. Portanto, YYYYMMDDé a alternativa básica ao formato estendido YYYY-MM-DD.


4
Eu não sabia que a ISO 8601 também permite AAAAMMDD além de AAAA-MM-DD.
precisa saber é o seguinte

iso.org/iso-8601-date-and-time-format.html parece indicar que o "formato estendido" de AAAA-MM-DD é o único formato para 8601?
Oskar Austegard 27/09

3
@keuleJ Minimizar o uso de delimitadores como AAAAMMDD em vez de AAAA-MM-DD é chamado de variação de formato “básica” no padrão ISO 8601.
Basil Bourque

Mais dois benefícios da ISO 8601: (a) Fácil de analisar por máquina, sem caractere ESPAÇO e sem texto localizado; e (b) Fácil de intuir por seres humanos em várias culturas, sendo o primeiro ano fácil de reconhecer (se contemporâneo), e sem assumir o idioma inglês.
Basil Bourque

55

É porque todas as outras maneiras de fazer isso são ambíguas.

01/02/2003 o que isso significa? Janeiro de 2003? Ou na Europa: 1º de fevereiro de 2003? Fica ainda pior se você usar dois dígitos para o ano, como 01/02/03.

É por isso que você usa AAAAMMDD, é a convenção que nos permite comunicar claramente sobre datas, 20030201 como uma data sempre clara. (e facilita a classificação)

(Agora não guarde isso como o número inteiro 20 milhões 30 mil duzentos e 1. por favor ok? Bonito por favor?)


14
"20030201 como data é sempre claro" : esse não é absolutamente o caso. É tão ambíguo quanto "01/02/2003", a menos que você saiba que AAAAMMDD (ou é AAAAMMDD ou DDMMYYYY? ...) é o formato que está sendo usado. Você SEMPRE precisa saber o formato da data; não existe uma "convenção" que torne as coisas inequívocas.
Skomisa # 27/18

6
@skomisa isso é bastante incorreto. A ISO 8601 definiu o formato de data padrão internacional especificamente pelos motivos declarados. Nenhum dos outros formatos é válido e não existe desde 19880605
K. Alan Bates

11
@ K.AlanBates Sua data é ambíguo, a menos que assumir que ele deve ser analisado de acordo com ISO 8601.
Goyo

16
20030201 é 20 de março de 201AD, certo?
David Richerby

10
@ Martijn, mas específico do idioma. Na Turquia, é Şubat em vez de fevereiro (antes de você pensar que seu código funciona, sempre verifique a Turquia ).
NH.

19

Seja t1 e t2 números inteiros distintos que representam duas vezes escritos na formatação AAAAMMDD. Então t1 <t2 implica que t2 ocorreu após t1.

Você perde essa ordem com a primeira formatação DD e MM.

ISO é, na IMO, o único formato sensível.


1
Exceto que você nunca armazenaria isso como um número inteiro, pelo menos eu nunca o vi nem o considerei.
pipe

5
@ pipe: Acredite, algumas pessoas fariam. Mantemos um sistema legado que armazena AAAAMMDD como números inteiros. O design provavelmente se originou em algum sistema antigo de banco de dados sem um tipo de data explícito e foi mantido para compatibilidade com versões anteriores. Não é bonito. Não faça isso.
Heinzi 25/09/19

19
@pipe tem sido a minha experiência na indústria de software que sempre que uma pessoa razoável quer dizer "Mas você nunca faria X" há sempre pelo menos um contra-exemplo
Joseph Rogers

5
@pipe No data warehousing, não é incomum usar um número inteiro aaaammdd como chave primária / substituta para uma tabela de datas.
soapygopher

4
@pipe, bem, o número de sequência de uma zona DNS é um número inteiro de 32 bits, que deve ser aumentado quando a zona mudar. Embora possa ser apenas um número simples, um idioma comum é usar números como 2018092601 ... Depois, há algumas definições curiosas de números mágicos descritas em feature_test_macros(7), como ter _POSIX_C_SOURCE > 200809Lmeios de que os recursos do POSIX.1-2008 sejam suportados ...
ilkkachu

12

Um ponto não mencionado é que, nas entradas interativas, esse formato permite controlar a entrada.

O sistema não pode saber se um mês tem 28, 29, 30 ou 31 dias sem conhecer o ano e o mês específicos. Quando a entrada interativa determina que ano e mês são os primeiros, ela pode verificar se o dia (inserido por último) está no intervalo permitido.

Concedido, a pergunta era amplamente sobre o formato da data, mas pode-se argumentar que o formato da data segue a formatação apresentada ao usuário.


7

AAAAMMDD data da mesma maneira que você pede números: porção mais significativa primeiro. MMDDYYYY seria como escrever "cento e vinte e três" como "vinte e cento e três".

Em nossa cultura, temos uma compreensão natural do MMDDYYYY porque, como seres humanos, temos consciência do tempo e os anos progridem lentamente. Geralmente sabemos em que ano é. Ver o ano raramente importa, então empurramos para trás. Os meses mudam apenas rápido o suficiente para manter sua importância. Outras culturas lidam com isso de maneira diferente. Grande parte do mundo prefere DDMMYYYY.


62
Você pode querer reformular "nossa cultura", porque na minha cultura é DDMMYYYY portanto, não é "nossa" cultura apenas seu
slebetman

66
Mapa abrangente de todos os países que usam o formato de data MMDDYYYY img-9gag-fun.9cache.com/photo/a2mXmGd_700b.jpg
Peregrine

9
Parece um argumento estranho: "Os meses mudam apenas rápido o suficiente para manter sua importância" -> Por que não colocar o dia em primeiro lugar, pois isso muda ainda mais rápido?
Wim Deblauwe

7
@JoelCoehoorn, é fácil deixar isso explícito ("Em nossa cultura nos EUA"). "our" / "we" é frequentemente usado para significar "a comunidade stackexchange" aqui.
AnoE

14
Exatamente. O Stackoverflow é internacional . O fato de você residir nos EUA não diz, implica ou até torna mais provável que outros também o sejam. Você não pode fazer nenhuma suposição sobre a localidade de seus leitores aqui, eles estão no mundo todo. E a maioria dos seus leitores não será você nem o OP, mas outras pessoas que encontrarão sua resposta no Google. Esse mesmo comentário está escrito em um continente diferente daquele em que você vive. E embora tenhamos nossos próprios hábitos - ehm - interessantes , certamente não usamos MM / DD / AAAA aqui ...
#

6

A classificação foi mencionada, mas de longe a razão mais útil para fazer isso é compará-las como "strings", e sim um timestamp de 26 caracteres é ordenado da mesma forma.

Sei que essas comparações são essenciais para a classificação, mas geralmente é útil para uma classificação com 2 elementos.

Eu trabalhei em projetos onde isso não foi adotado e, sim, programadores tentaram (com resultados mistos) comparar as datas como seqüências de caracteres.

Formatação bonita é para o lado do cliente ou tipografia.


5

Esse formato torna a ordem alfabética das seqüências de caracteres idêntica à ordem cronológica das datas. Isso é útil porque muitas ferramentas fornecem a ordem alfabética de, por exemplo, arquivos por nome, mas não há como analisar datas formatadas arbitrariamente a partir dos nomes dos arquivos e classificá-las por elas.


4

É sobre restrição. Imagine ANO, MÊS e DIA como parâmetros, no formato AAAAMMDD, cada parâmetro é mais restritivo que o anterior.

Portanto, se você deseja pesquisar algo que aconteceu em 1970, pode fazê-lo pesquisando uma sequência iniciada por "1970*", mas se você se lembra de qual mês foi, pode adicionar o mês como "197005*". Dessa forma, cada "parâmetro" da data fornece informações mais específicas.

É a única maneira de passar de informações menos específicas ( "1970*") para informações mais específicas ( "19700523").


3
Não é realmente um grande argumento - é tão comum procurar coisas acontecendo em meses específicos, em vez de anos específicos.
Cubic

1
Se 1970*e 197005*representar a sintaxe do curinga "glob", você poderá pesquisar várias datas MMDDYYYY pesquisando a glob *1970ou 05*1970. Sua resposta pode estar implicitamente assumindo alguma restrição extra que você não mencionou explicitamente e pode ser melhorada explicando sua suposição.
Quuxplusone 26/09/18

3
Esse é um efeito colateral ou outra maneira de descrever a ordem das chaves de classificação mencionada por outras respostas. Mas essa explicação se desfaz, a menos que você a restrinja à pesquisa de prefixos. (Mais fácil de indexar, mas de nenhuma maneira necessário).
Peter Cordes

Também significa que você pode selecionar uma seqüência de datas com regexp de relativamente simples ...
Harper

1

Por que, na programação, o formato padrão da data é AAAAMMDD ...

É um formato legível por humanos para entrada e saída, não é necessariamente armazenado dessa maneira.

Mais de um terço de todas as linguagens de programação foram desenvolvidas em um país com o inglês como idioma principal e a maioria das modernas adere a um padrão de alguma descrição - o padrão internacional para datas é a ISO 8601 .

Mais informações: (TMI?)

À medida que o tempo muda, geralmente avança, os dias são incrementados primeiro, depois meses e, finalmente, anos - pode ser mais fácil entender se tivermos datas decimais (e hora decimal ) - à medida que o tempo passa, o número aumenta. É simplesmente mais fácil para os humanos olharem para o número e compará-lo com outra data de relance.

O computador não se importa com a estrutura que você deseja usar e, na maioria (mas não em todos ) dos computadores, a lógica binária é usada - a base e na verdade tem a menor economia de raiz, mas não é a mais eficiente nem a mais fácil para uma sequência completa .

O formato real de entrada e saída para datas varia de acordo com o país e é definido pela localização , enquanto o AAAAMMDD pode parecer mais compreensivo e o que você está acostumado não é universal hoje, nem era assim no passado para o por mais tempo, ainda hoje os números romanos são comumente usados ​​para datas .

O conhecimento antecipado do ano indica o número de dias em um ano, a maior variação na duração que um ano pode sofrer. Ele informa antecipadamente o número de dias em cada mês a seguir (para verificação de erros durante a entrada), permitindo que a entrada do dia primeiro possa ter o seu backup se o ano subsequente não concordar com a sua entrada - possivelmente tornando a entrada acessível mais difícil . Também tem importância em relação ao formato do calendário . Veja também o calendário geek , com seus stardates decimais.

No que diz respeito ao computador, é provável que você use o tempo da Época do UNIX , o número de segundos decorridos desde 00:00:00 Hora Universal Coordenada (UTC), quinta-feira, 1 de janeiro de 1970, em que todos os dias são tratados como se contivessem exatamente 86400 segundos. Veja também o dia juliano . O formato AAAAMMDD é simplesmente preferido por seres humanos egocêntricos, a IAU considera um ano como um ano juliano de 365,25 dias (31,5576 milhões de segundos), a menos que seja especificado o contrário.


1
Na verdade, quase todos os softwares humanos e que já conheci preferem algum outro formato.
Goyo

1
Prazer em conhecê-lo! Sou Dave e prefiro AAAAMMDD
Reversed Engineer

0

Outro uso que eu vi para essa representação é que você pode armazenar datas como números inteiros (ou seja, em um banco de dados), usando apenas 4 bytes por data. O uso de AAAAMMDD significa que comparações de números inteiros (geralmente uma única instrução de máquina) têm o mesmo resultado que comparações na data representada. E imprime moderadamente de maneira humana. E nada disso requer nenhum código ou suporte especial, em qualquer ambiente de programação convencional.

Se essas coisas são basicamente o que você precisa fazer com datas e precisa fazer muito disso, esse formato é bastante atraente.

Por comparação, datas em formatos comuns como DD / MM / AAAA recebem 10 bytes como cadeias de caracteres ASCII. AAAAMMDD reduz isso para 8 e obtém a vantagem "comparar as representações tem o mesmo resultado que comparar as datas", mas mesmo assim a comparação baseada em seqüências é caractere por caractere, em vez de uma única comparação inteira.


2
É trivial compactar uma data em três bytes. O intervalo 0000 ~ 9999 requer 14 bits, 01 ~ 12 requer 4 bits e 01 ~ 31 requer 5 bits, para uma soma de 23 bits. Usando também o bit restante em uma quantidade de três bytes, você pode representar datas em um período de 32.768 anos, mantendo uma resolução de um dia. Isso poderia ser usado, por exemplo, para permitir representar datas no intervalo de 8191 aC a 24576 dC. Empacotando os bits como, digamos, aaaaaaaaaaaaaaammmmddddd, a representação decimal permanece diretamente comparável (embora não seja diretamente legível por humanos, mas quem se importa com o armazenamento físico do banco de dados?).
um CVn

0

A mesma razão pela qual a Lua é feita de queijo verde: não é. Na maioria dos casos, o formato padrão é algum tipo de string localizada. Às vezes, o formato ISO é usado, mas geralmente com traços para melhor legibilidade. YYYYMMDD(ou %Y%m%dna strftimelinguagem) raramente é o padrão. Para ser justo, tenho certeza de que já o vi, mas não consigo pensar em um exemplo agora.

Data Unix (utilitários principais GNU)

date

Resultado:

Wed Sep 26 22:20:57 CEST 2018

Pitão

import time
print(time.ctime())

resultado:

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

Resultado:

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

Resultado:

Wed Sep 26 22:51:22 2018

Javascript

current_date = new Date ( );
current_date;

Resultado:

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

SQLite

SELECT date('now');

Resultado:

2018-09-26

LibreOffice Calc

insira a descrição da imagem aqui

Gnumeric

insira a descrição da imagem aqui

OnlyOffice

insira a descrição da imagem aqui

Python + numpy

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

Resultado:

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

Python + pandas

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

Resultado:

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

Engenharia de software

insira a descrição da imagem aqui

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

alternative.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
Para adicionar ao seu argumento, quantos deles são formatados dessa maneira devido às configurações do usuário no computador em que você executou o script?
Topher Brink

O primeiro não é realmente "bash", é o programa de data (e ele exibe Do 27. Sep 22:27:09 CEST 2018aqui.)
Paulo Ebermann

@ PaŭloEbermann Você está certo, espero que esteja melhor agora. Como eu disse, muitos desses formatos são localizados, então o formato real que você vê depende das suas opções de localização.
Goyo

3
Embora o ponto desta resposta seja verdadeiro para aplicativos orientados para o usuário final, não para troca de dados entre sistemas, serialização de dados, protocolos de mensagem / dados, log, rastreamento, depuradores e assim por diante. O padrão ISO 8601 está rapidamente se tornando a norma para esses usos, destinados a administradores de sistemas e programadores. O mesmo vale para cenários internacionais ou independentes de local.
Basil Bourque

@BasilBourque Obrigado, adicionei uma amostra aleatória dos logs que encontrei no meu próprio sistema. Não tenho exemplos dos outros tipos à mão. Mas eu não acho que uma tendência para a padronização da ISO 8601 em domínios específicos torne sua variante básica "o padrão na programação" em face da grande quantidade de software padrão para outros formatos.
Goyo 28/09

-1

Um benefício adicional não mencionado até agora é que a quantização desejável (atribuir um valor preciso como pertencendo à mesma faixa geral de valores) é uma operação única relativamente fácil e rápida.

Suponha que você esteja escrevendo um relatório que resuma os eventos hoje, como a soma e o número de vendas. A data e a hora da venda são armazenadas como AAAAMMDDHHMISS, basta manter os 8 caracteres mais à esquerda (se for uma string) ou dividir o número inteiro (ou seja, piso) em 1.000.000 para reduzir a data e hora do dia da venda.

Da mesma forma, se você quisesse as vendas do mês, mantenha apenas os 6 dígitos à esquerda ou divida por 100.000.000

Claro, você poderia argumentar que qualquer manipulação de cadeia de caracteres é possível; um horário de vendas para "12-25-2018 12:34 pm" pode ser substringado e manipulado várias vezes para obter o mês e o ano. No formato numérico, 122520181234 poderia ser dividido e modificado, multiplicado e dividido um pouco mais e, eventualmente, também produzir um mês e um ano ... mas o código seria realmente difícil de escrever, ler, manter e entender.

E mesmo sofisticados otimizadores de banco de dados podem não ser capazes de usar um índice em uma coluna para uma cláusula where se o formulário de data for MM / DD / AAAA, mas cortado e reunido. Em comparação, armazenar uma representação AAAAMMDD e desejar dezembro de 2018 leva a cláusulas where do ilk dateasstring LIKE '201812%'ou dateasint BETWEEN 20181200 and 20181299- algo para o qual um índice pode ser facilmente usado

Portanto, se não houvesse um tipo de dados dedicado para datas e a representação numérica / seqüência de caracteres fosse a única opção, usar e armazenar horários em alguma representação do maior intervalo entre a esquerda e o menor intervalo entre as right tem alguns benefícios para facilitar o entendimento, manipulação, armazenamento, recuperação e manutenção de código

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.