O formato de data JSON" direita"

já vi tantos padrões diferentes para o formato de data JSON:

"\"\\/Date(1335205592410)\\/\""         .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\""    .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z"              JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00"             ISO 8601
Qual deles é o certo? Ou melhor? Há algum tipo de padrão nisto?

Author: bluish, 2012-04-23

10 answers

O JSON por si só não especifica como as datas devem ser representadas, mas o JavaScript fá-lo.

Você deve usar o formato emitido por Date's toJSON método:

2012-04-23T18:25:43.511Z

Eis o porquê:
  1. É legível, mas também sucinto.

  2. Ordena correctamente.

  3. Inclui segundos fraccionais, o que pode ajudar a restabelecer a cronologia.

  4. Está em conformidade com ISO 8601

  5. A ISO 8601 está bem estabelecida internacionalmente há mais de uma década.

  6. ISO 8601 é endossada por W3C, RFC3339, e XKCD

Dito isto, cada biblioteca de datas já escrita pode entender "milissegundos desde 1970". Por isso, para facilitar a portabilidade, o ThiefMaster tem razão.

 1422
Author: funroll, 2014-11-09 10:03:51
O JSON não sabe nada sobre datas. O que o. NET faz é uma Hack/extensão não-padrão.

Eu usaria um formato que pode ser facilmente convertido para um objeto Date em JavaScript, ou seja, um que pode ser passado para new Date(...). O formato mais fácil e provavelmente mais portátil é o timestamp que contém milissegundos desde 1970.

 107
Author: ThiefMaster, 2014-11-09 10:07:24

Não existe um formato adequado ; O Especificação JSON não especifica um formato para troca de datas que é por isso que existem tantas maneiras diferentes de fazê-lo.

O melhor formato é, sem dúvida, uma data representado em formato ISO 8601 (ver hotéis-pensão - ); é um bem conhecido e amplamente utilizado formato e pode ser tratada em muitas línguas diferentes, tornando-o muito bem adaptado para a interoperabilidade. Se tem controlo sobre a JSON gerado, por exemplo, você fornece dados para outros sistemas no formato json, escolhendo 8601 como o formato de intercâmbio de data é uma boa escolha.

Se você não tem controle sobre a json gerada, por exemplo, você é o consumidor da json de vários sistemas existentes diferentes, a melhor maneira de lidar com isso é ter uma função de utilidade de análise de data para lidar com os diferentes formatos esperados.

 32
Author: Russ Cam, 2018-02-27 16:31:37

De RFC 7493 (o formato de mensagem I-JSON):

I-JSON significa Internet JSON ou interoperável JSON, dependendo de quem você perguntar.

Os Protocolos contêm frequentemente elementos de dados concebidos para conter horários ou durações temporais. Recomenda-se que todos estes dados os itens devem ser expressos como valores de cadeia de caracteres no formato ISO 8601, conforme especificado in RFC 3339 , with the additional restrictions that uppercase rather do que letras minúsculas usado, que o fuso-horário não em falta, e que os segundos de saída opcional devem ser incluídos mesmo quando o valor deles é"00". Recomenda-se também que todos os itens de dados que contenham durações temporais conformes com a produção" duração " em Apêndice A da RFC 3339, com as mesmas restrições adicionais.

 21
Author: Bryan Larsen, 2015-05-20 19:40:39

Só para referência, já vi este formato usado:

Date.UTC(2017,2,22)

Funciona com JSONP que é suportado pela função $.getJSON(). Não tenho a certeza se iria tão longe a ponto de recomendar esta abordagem... É só uma possibilidade, porque as pessoas estão a fazê-lo desta maneira.

FWIW: nunca usar segundos desde a época de um protocolo de comunicação, nem milisegundos desde a época, porque estes são repletos de perigo graças à implementação aleatória do Salto segundos (você não tem idéia se o remetente e o destinatário ambos implementam corretamente os segundos de salto UTC).

É uma espécie de ódio de estimação, mas muitas pessoas acreditam que UTC é apenas o novo nome para GMT ... errado! Se o seu sistema não implementar segundos bissextos, então você está usando GMT (muitas vezes chamado UTC, apesar de estar incorreto). Se você implementar completamente segundos bissextos você realmente está usando UTC. Os segundos futuros do salto não podem ser conhecidos; eles são publicados pelo IERS conforme necessário e requerem atualizações constantes. Se estão a executar um sistema que tenta implementar segundos bissextos, mas contém e uma tabela de referência desactualizada (mais comum do que possa pensar), então você não tem GMT, nem UTC, você tem um sistema estranho que finge ser UTC.

Estes contadores de datas só são compatíveis quando expressos num formato discriminado (y, m, d, etc.). Eles nunca são compatíveis em um formato de época. Não te esqueças disso.

 7
Author: Tel, 2017-02-27 07:33:07

No Sharepoint 2013, obter dados em JSON não existe nenhum formato para converter a data em formato apenas Data, porque nessa data deve estar no formato ISO

yourDate.substring(0,10)

Isto pode ser útil para si

 1
Author: raghava arr, 2016-09-16 12:21:33
O seguinte código funcionou para mim. Este código irá imprimir a data no formato DD-MM-AAAA.
DateValue=DateValue.substring(6,8)+"-"+DateValue.substring(4,6)+"-"+DateValue.substring(0,4);

Caso contrário, Pode também utilizar:

DateValue=DateValue.substring(0,4)+"-"+DateValue.substring(4,6)+"-"+DateValue.substring(6,8);
 -2
Author: Aniket Kumar Shrivastava, 2018-06-06 12:56:00
Só há uma resposta correcta para isto e a maioria dos sistemas erra. Número de milisegundos desde a época, conhecido como um inteiro de 64 bits. Fuso horário é uma preocupação UI e não tem negócios na camada app ou camada db. Por que seu db se importa com o fuso horário algo é, quando você sabe que ele vai armazená-lo como um número inteiro de 64 bits, em seguida, fazer os cálculos de transformação. Tira as partes estranhas e trata as datas como números até à UI. Você pode usar operadores aritméticos simples para fazer perguntas e lógica.
 -3
Author: Chad Wilson, 2015-12-16 23:56:41

É trabalho para mim com o servidor parse

{
    "ContractID": "203-17-DC0101-00003-10011",
    "Supplier":"Sample Co., Ltd",
    "Value":12345.80,
    "Curency":"USD",
    "StartDate": {
                "__type": "Date",
                "iso": "2017-08-22T06:11:00.000Z"
            }
}
 -4
Author: Kemal Karadag, 2017-12-15 02:11:54
Acho que isso depende do caso de uso. Em muitos casos, pode ser mais benéfico usar um modelo de objeto apropriado( em vez de tornar a data para uma string), assim:
{
"person" :
      {
 "name" : {
   "first": "Tom",
   "middle": "M",
  ...
}
 "dob" :  {
         "year": 2012,
         "month": 4,
         "day": 23,
         "hour": 18,
         "minute": 25,
         "second": 43,
         "timeZone": "America/New_York"
    }   
   }
}
É verdade que isto é mais descritivo do que o RFC 3339,mas ...
  • também é legível para o homem
  • implementa um modelo de objeto próprio (como em OOP, na medida em que JSON o permite)
  • suporta fusos horários (não apenas o deslocamento UTC na data e hora indicadas)
  • Pode suportar unidades menores como milisegundos, nanosegundos,.. ou simplesmente segundos fraccionais
  • não é necessário um passo de análise separado( para analisar o texto de data-hora), o analisador de JSON fará tudo por si
  • criação fácil com qualquer data-hora ou implementação em qualquer língua
  • pode ser facilmente estendido para apoiar outras escalas de calendário (hebraico, Chinês, Islâmico ...) e eras (AD, BC,...)
  • É o ano 10000 seguro; -) (RFC 3339 isn'T)
  • suporte todo o dia datas e horas flutuantes (o Javascript's Date.toJSON() Não)

Eu não acho que a ordenação correta (como observado pela funroll para a RFC 3339) é uma característica que é realmente necessária ao serializar uma data para JSON. Além disso, isso só é verdade para datas-tempos tendo o mesmo fuso horário offset.

 -12
Author: Marten, 2018-09-06 03:52:34