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?
sql
engineering
rdbms
date-format
lucaswxp
fonte
fonte
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.Respostas:
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.
fonte
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).
fonte
Sim. Esses softwares usarão a ISO 8601 .
A ISO 8601 possui várias vantagens sobre outros formatos de data:
1_file, 10_file, 2_file
).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 .
O padrão define variações "básicas" como minimizar o uso de delimitadores. Portanto,
YYYYMMDD
é a alternativa básica ao formato estendidoYYYY-MM-DD
.fonte
É 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?)
fonte
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.
fonte
feature_test_macros(7)
, como ter_POSIX_C_SOURCE > 200809L
meios de que os recursos do POSIX.1-2008 sejam suportados ...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.
fonte
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.
fonte
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.
fonte
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.
fonte
É 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"
).fonte
1970*
e197005*
representar a sintaxe do curinga "glob", você poderá pesquisar várias datas MMDDYYYY pesquisando a glob*1970
ou05*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.É 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.
fonte
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.
fonte
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%d
nastrftime
linguagem) 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)
Resultado:
Pitão
resultado:
C
Resultado:
C ++
Resultado:
Javascript
Resultado:
SQLite
Resultado:
LibreOffice Calc
Gnumeric
OnlyOffice
Python + numpy
Resultado:
Python + pandas
Resultado:
Engenharia de software
apport.log
alternative.log
cups / access.log
syslog
fonte
Do 27. Sep 22:27:09 CEST 2018
aqui.)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%'
oudateasint BETWEEN 20181200 and 20181299
- algo para o qual um índice pode ser facilmente usadoPortanto, 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
fonte