Existe um formato universal de data que qualquer pessoa no mundo possa entender?


10

No Canadá, todos estão familiarizados com o formato da data YYYY-MM-DD. Na Europa ou na África do Sul, eles preferem DD-MM-YYYY. Existem usuários da África do Sul que se confundem com o YYYY-MM-DDformato da data. Existe uma maneira de lidar com esta situação?

Eu estava pensando em usar o seguinte formato de método para todos: Feb 02, 2011


21
Eu acho que o formato AAAA-MM-DD também é um padrão ISO.
FrustratedWithFormsDesigner

2
"Na Europa ou na África do Sul, eles preferem DD-MM-YYYY." Exceto, por exemplo, na Hungria ( YYYY.MM.DD) ou na Finlândia ( DD.MM.YYYY), ou ... Desculpe, a realidade é confusa :-(
Péter Török

6
E os diferentes calendários?

4
Quando a coleta de dados de radar (na América do Norte), que usou este para nomes de arquivos: prefix_1999_12_23_16_45_53.ext. Razão principal: isso foi extremamente fácil de classificar, PESQUISAR e analisar. Ao pesquisar, você realmente deseja começar primeiro com a unidade mais significativa para alcançar a meta o mais rápido possível. Esse tipo de string é até compatível com árvores binárias. O laboratório foi dominado por estudantes da Europa, mas acho que isso era apenas senso comum, se não um padrão científico. No entanto, em um país em que cresci, usaríamos DD-MM-AAAA para uso diário. Raciocínio: quando você acorda, qual é a primeira parte que você quer saber?
Job

2
@Frustrado, acho que o argumento dele é que existem calendários com um ano inicial diferente (como um muçulmano interpretaria, por exemplo, 30.12.1268?) Ou meses de lua (dos quais há aproximadamente 13 por ano) etc. Então, para ser realmente universal é mais do que apenas concordar em que número é o dia e que é o mês ...
Péter Török

Respostas:


15

A parte ambígua é diferenciar dia e mês se eles são representados por números.

02/03 significa 03 de fevereiro ou 02 de março?

Alterando o identificador do mês de seu número com seu nome, você remove essa ambiguidade. Para responder sua pergunta, sua variante Feb 02, 2011parece ser uma boa solução.

Ainda existe um problema em potencial com o número do ano, se você o escrever apenas com 2 dígitos, mas é fácil de corrigir (use 4).


10
E então você pode apenas ter um arquivo de tradução para nomes de meses em diferentes idiomas.
FrustratedWithFormsDesigner

11
@FrustratedWithFormsDesigner E não esqueça de obter uma tradução profissional para as abreviações corretas (conhecidas) também.
Nicole

E os idiomas que não se incomodam em nomear os meses?
APENAS MINHA OPINIÃO correta

19

Não . Não existe um formato de data reconhecido universalmente.

ISO 8601 Define um padrão internacional para formatos de data. Como tal, é provavelmente o melhor compromisso. Mas, como você diz, os usuários nem sempre gostam desse formato.

A única solução correta é apresentar um formato diferente para diferentes países. Você pode achar que existe uma biblioteca padrão para isso, se a linguagem de programação escolhida tiver um número significativo de seguidores.


2
Isso é ótimo. Normalmente uso o AAAAMMDD para arquivos de log etc. Agora, posso dizer que estou apenas em conformidade com a ISO-8601!
Mark Harrison

11
Ao usar a ISO 8601, geralmente acho que é melhor formatar explicitamente a coisa toda, ou seja, 1999-12-25T00: 00: 00.000Z . Sim, parece sem sentido para a pessoa comum, mas não há chance de ambiguidade.
precisa saber é o seguinte

2
"A única solução correta é apresentar um formato diferente para diferentes países". - e como, exatamente, devo imprimir uma data em uma guia de remessa que pode ser enviada para qualquer lugar do mundo?
Scott Whitlock

@ ScottWhitlock: Infelizmente, não há uma solução universalmente aceita para esse problema. Se você não sabe para onde um pacote está sendo enviado quando você imprime a data, a ISO 8601 pode ser sua melhor aposta.
Kramii

"A única solução correta é apresentar um formato diferente para diferentes países". Eu diria que isso não está correto. Hoje acontece que algumas bibliotecas têm uma idéia útil do meu formato de data preferido, com base na minha linguagem preferida, e causam confusão. Mas como um primeiro passo, já que não podemos consertar todas as culturas no momento, use a ISO 8601 ou o texto por meses ou algo assim.
Erik I

9

Você deve usar as informações da cultura para isso. Ou pelo menos o formato de exibição local.

Em JavaScript, você pode usar o método toLocaleString para a classe Date .

Para C #, você pode usar a cadeia de caracteres de formato ao usar o ToString .

Uma pesquisa rápida no Google deve mostrar como usar a cultura no idioma de sua escolha.


5

Eu aceitaria AAAA-MM-DD (e sempre escreveria anos com quatro dígitos e meses e dias com dois dígitos). AAAA-DD-MM, pelo que sei, é incomum ou raro, portanto, o formato AAAA-MM-DD é o que tem menos ambiguidade e, eventualmente, seus usuários irão entender. Além disso, você obtém a vantagem de classificação trivial.


2

Você pode dar a cada usuário seu próprio código de idioma, que renderiza datas e outras informações de acordo com suas preferências locais?


1

Muitas vezes você pode configurar o código do idioma e usar o I18n na maioria das estruturas.


0

No caso geral, você precisará especificar o formato e o valor. Esta é a única maneira de evitar toda e qualquer confusão. Por exemplo, você pode dizer "2011-02-02 (AAAA-MM-DD)". No entanto, o custo é de simplicidade e legibilidade. Portanto, conheça seu público.

Você pode, é claro, dizer "A seguir, todas as datas estão no formato AAAA-MM-DD ...." Então "02-02-2011" que aparecer mais tarde será inequívoco. Isso pode ser mais agradável, mas, novamente, conheça seu público.


Certo, exceto que no dia estoniano = päev e mês = kuu, em Filippino eles são: araw e buwan, em finlandês: päivä, kuukausi, em húngaro: nap, hónap, em indonésio: hari, bulan, em maltês: jum, xahar , em romeno: zi, lună, em turco: gün, ay, em vietnamita: ngày, tháng ... para não mencionar muitos idiomas em que um mês não começa com m ou o dia não começa com d (alemão: Monat, Tag ), bem como idiomas que não usam nada como alfabeto latino.
Job

11
Bem, "2011-02-02" é sem ambiguidades em qualquer caso ...;)
Martin

0

Essa sugestão é provavelmente inútil, mas vi meses escritos como algarismos romanos. Claro, 3 / XI / 2011 pode ser 11 de novembro ou 3 de março, mas acho que a primeira interpretação é mais natural.


11
Números romanos? "Natural?"
Wonko the Sane

@Wonko, "natural" no sentido de que, nesse contexto, é mais provável que XI seja interpretado como um mês do que como um dia. Eu admito que é extremamente subjetivo.
21711 Ghibett

+1, eu mesmo estava pensando em algo assim. no entanto, eu também concordo com seus críticos.
Job

Como nunca vi esse formato, eu pensava primeiro em "erro de digitação" ou "erro de tradução" antes que me ocorresse "algarismos romanos". Só então eu tentaria adivinhar o significado.
Wonko the Sane

Sem mencionar que 3 / II / 2011 acabará sendo interpretado como novembro.
MSalters 23/05

0

Eu diria que depende do que você está fazendo, de quanto controle você tem sobre a entrada e a armazena em algum lugar?

Para armazenamento, eu usaria o que foi sugerido por Mike Dunlavey:

AAAAMMDDHHMMSS, onde a hora é no UTC, é o caminho a seguir sempre que posso, pelas razões que você indicar. Quando não tenho escolha, deixo o usuário escolher.

Ele não deixou isso como resposta, então eu vou.

Mais uma coisa: confira a seguinte captura de tela de como inserir a data de validade do CC: http://www.ubercart.org/files/credit_card_checkout.jpg

O melhor deste exemplo é que ele não faz você pensar. Ele usa números e nomes para o mês. Eu consideraria usar algo semelhante para a entrada. Para o mês, inclua o número e o nome localizado. Para o ano e o dia, use as caixas numéricas Para cima / Para baixo ou Combinado. Então, o controle do calendário também parece bacana.

Como eu disse, depende. Para armazenamento: se estiver usando um banco de dados, verifique se ele já fornece um bom formato de dados inequívoco. Se estiver usando algum outro método, veja se "AAAAMMDDHHMMSS onde a hora está no UTC" ajuda. Para apresentá-lo ao usuário - leve em consideração quais países / localidades podem estar envolvidos e escolha o tipo mais direto de representação "Não me faça pensar". Considere também fornecer uma opção.

Por fim, confira alguns produtos interessantes que já fazem algo semelhante e tente descobrir como eles fazem isso.


ah porcaria, ao ler a imagem que eu pensei que nós estávamos falando sobre 11 de novembro ... apenas para perceber que o dia não era necessário quando se fala em data de expiração do cartão de crédito: /
Matthieu M.

@ Matthieu M., sim, isso é um pouco enganador :) No entanto, se você está segurando um CC na mão e está prestes a executar a entrada de dados, talvez isso ajude mais do que dói. Se houvesse três caixas - uma para o dia, isso poderia ser menos ambíguo.
Job

0

Não há formato universal de data e hora para os usuários finais do site. Também não há um valor único de data e hora porque o valor é diferente por fuso horário do cliente. Você deve usar a globalização - sua segmentação de formatos de dados, hora, moeda, calendário, nubmer com base na cultura do usuário (pode ser recebida de idiomas aceitos transmitidos pelo navegador do usuário ou por chave implementada diretamente no seu aplicativo). Algumas APIs (por exemplo, .NET) têm suporte direto para esses recursos.

Para armazenar data e hora no banco de dados, use o formato universal - UTC (horário universal das coordenadas).


O UTC não é tão universal: se você quiser levar em consideração os segundos bissextos, deve usar TAI #
mouviciel

-2

É lamentável que toda a inteligência no mundo da computação internacional não possa quebrar essa porca.

Nem a Microsoft nem outros fornecedores consideraram adicionar uma máscara de data que faria o Mês parecer preenchido com zero, como o dia, mas com três dígitos. A adoção da prática ajudaria a promover uma nova série de formatos de data modificados, matematicamente equivalentes, mantendo fácil identificação e distinção em qualquer um dos layouts de data tradicionais. Isso é:

  • 0MM-DD-AAAA, por exemplo, 002-03-2016 para Feb 03,2016

  • DD-0MM-AAAA, por exemplo, 03-002-2016 para 03 de fevereiro de 2016

  • AAAA-0MM-DD, por exemplo, 2016-002-03 para 2016-02-03

  • AAAA-DD-0MM, por exemplo, 2016-03-002 (se alguém quiser usá-lo!)

Parece muito fácil corrigi-lo desta maneira ... Acho que simples simplesmente não vende bem.


2
Tudo o que posso dizer é: xkcd.com/927 Já temos um padrão ISO para datas e não precisamos de outro.
Simon B
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.