Melhor formato de carimbo de data / hora para CSV / Excel?

110

Estou escrevendo um arquivo CSV. Preciso escrever carimbos de data / hora precisos pelo menos no segundo e, de preferência, no milissegundo. Qual é o melhor formato para carimbos de data / hora em um arquivo CSV, de forma que possam ser analisados ​​com precisão e sem ambigüidade pelo Excel com mínima intervenção do usuário?


fonte
que linguagem você está usando para criar a saída?
Peter Perháč,

Respostas:

103

Para uma segunda precisão, aaaa-MM-dd HH: mm: ss deve resolver.

Acredito que o Excel não seja muito bom com frações de segundo (perde-as ao interagir com o objeto COM IIRC).

Joe
fonte
Sim - concordo com você e Fredrik. Se você pudesse desenterrar essas referências, eu certamente ficaria grato. Obrigado!
18
Para qualquer pessoa que use Ruby strftime, a string de argumento equivalente é"%Y-%m-%d %H:%M:%S"
Greg Matthew Crossley
2
@nickf - .CSVé apenas um arquivo de texto. Você pode mostrar o fuso horário ou qualquer outra coisa que você escrever no arquivo como texto simples separado por vírgulas; o que é importante é qual aplicativo o lerá e como esse aplicativo espera o texto. Aqui está a documentação para o padrão CSV da Biblioteca do Congresso. Não existe uma maneira prescrita de armazenar datas especificamente. Também RFC-4180 e CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm).
ashleedawg
C # / IronPython File.GetLastWriteTimeUtc ("your-path-here"). ToString ("yyyy-% m-% d% H:% MM:% ss")
Konrads
Em python com strftime () o formato também seria "%Y-%m-%d %H:%M:%S"- o mesmo que Ruby.
rcronk
18

A sugestão anterior de usar "aaaa-MM-dd HH: mm: ss" é adequada, embora eu acredite que o Excel tenha uma resolução de tempo muito mais precisa do que essa. Acho este post bastante confiável (siga o tópico e você verá muita aritmética e experiências com o Excel) e, se estiver correto, você terá seus milissegundos. Você pode apenas adicionar casas decimais no final, por exemplo, "aaaa-mm-dd hh: mm: ss.000".

Você deve estar ciente de que o Excel pode não necessariamente formatar os dados (sem intervenção humana) de forma que você veja toda essa precisão. No meu computador no trabalho, quando configuro um CSV com dados "aaaa-mm-dd hh: mm: ss.000" (manualmente usando o Bloco de notas), obtenho "mm: ss.0" na célula e "m / d / aaaa hh: mm: ss AM / PM "na barra de fórmulas.

Para obter o máximo de informações [1] transmitidas nas células sem intervenção humana, você pode querer dividir seu registro de data e hora em uma porção de data e uma porção de tempo, com a porção de tempo apenas em segundos. Parece-me que o Excel quer dar a você no máximo três "níveis" visíveis (onde as frações de segundo são seus próprios níveis) em qualquer célula, e você deseja sete: anos, meses, dias, horas, minutos, segundos, e frações de segundo.

Ou, se você não precisa que o carimbo de data / hora seja legível, mas deseja que seja o mais preciso possível, você pode preferir apenas armazenar um número grande (internamente, o Excel usa apenas o número de dias, incluindo dias fracionários , desde uma data de "época").


[1] Ou seja, informações numéricas. Se você deseja ver o máximo de informações possível, mas não se preocupa em fazer cálculos com elas, pode criar algum formato que o Excel irá definitivamente analisar como uma string e, portanto, deixar sozinho; por exemplo, "aaaammdd.hhmmss.000".

John Y
fonte
14

O formato "aaaa-MM-dd hh: mm: ss.000" não funciona em todos os locais. Para alguns (pelo menos dinamarqueses) "aaaa-MM-dd hh: mm: ss, 000" funcionará melhor.

user662894
fonte
2
Estranhamente, o Excel 2010 não detecta datas quando a parte do milissegundo é 000. Qualquer outro serve.
Dio F
4

Acredito que se você usasse o doubletipo de dados, o recálculo no Excel funcionaria perfeitamente.

Peter Perháč
fonte
Acabei de experimentar e funciona muito bem. Só tenho que dizer ao Excell que o formato dessa coluna em particular é Data / Hora. Ele não detectará isso automaticamente no CSV, pois obviamente não descreve os dados
Peter Perháč,
3

Vá para as configurações de idioma no Painel de Controle, em Opções de Formato, selecione um local e veja o formato de data real para o local escolhido usado pelo Windows por padrão. Sim, esse formato de carimbo de data / hora é sensível à localidade. O Excel usa esses formatos ao analisar CSV.

Além disso, se o local usar caracteres além do ASCII, você terá que emitir CSV na página de código "ANSI" do Windows pré-Unicode correspondente, por exemplo, CP1251. O Excel não aceita UTF-8.

John smith
fonte
1

Quanto aos fusos horários. Tenho que armazenar o deslocamento do UTC como segundos do UTC para que as fórmulas no Excel / OpenOffice possam eventualmente localizar os horários. Achei isso mais fácil do que armazenar qualquer número que tenha um 0 na frente dele. -0900 não analisava bem em nenhum sistema de planilha e importá-lo era quase impossível de treinar as pessoas para fazer.

mais estranho
fonte
1

O formato "aaaa-mm-dd hh: mm: ss.000" não funciona em todos os locais. Para alguns (pelo menos dinamarqueses) "aaaa-mm-dd hh: mm: ss, 000" funcionará melhor.

conforme respondido pelo usuário662894.

Eu quero adicionar: não tente obter microssegundos de, digamos, o tipo de dados datetime2 do SQL Server: O Excel não pode lidar com mais de 3 segundos fracionários (ou seja, milissegundos).

Portanto, "aaaa-mm-dd hh: mm: ss.000000" não funcionará e quando o Excel for alimentado com esse tipo de string (do arquivo CSV), ele executará arredondamento em vez de truncamento .

Isso pode ser bom, exceto quando a precisão de microssegundos é importante, caso em que é melhor NÃO acionar um reconhecimento automático de tipo de dados, mas apenas manter a string como string ...

Hansjp
fonte
0

Eu acho que o formato ISO é uma boa ideia. ( Artigo da Wikipedia , também com informações de tempo)

Fredrik Mörk
fonte
1
(voto negativo; na verdade, não, o Excel não reconhece esse formato)
Doug
1
@Doug Acabei de fazer um teste para verificar: funciona bem no Office 2010, edição em inglês, tentei com as minhas configurações locais (sueco, que usa o formato ISO para datas, e inglês dos EUA). Sem interesse: em que ambiente isso falhou para você? Não estou nem um pouco surpreso que funcione para alguns e falhe para alguns: O Excel não é realmente uma maravilha de consistência em minha experiência ...
Fredrik Mörk
1
Definitivamente não funciona no Office 2012 para OSX. O único formato 'nativo' que o Excel parece reconhecer em meus testes foi MM / DD / AAAA HH: MM: SS; tudo o mais era simplesmente tratado como texto.
Doug de
1
Eu encontrei essa pergunta depois de descobrir que o Excel não reconhecia datas no formato ISO em um CSV. IMO, isso é um bug no Excel.
billpg
2
Pode ser, @Patrick. Isso foi um pouco difícil de testar em 2009 ;-)
Fredrik Mörk
0

Experimente MM / dd / aaaa hh: mm: ss um formato.

Código Java para criar arquivo XML.

xmlResponse.append ("mydate>"). append (this.formatDate (resultSet.getTimestamp ("date"), "MM / dd / aaaa hh: mm: ss a")). append ("");

public String formatDate(Date date, String format)
{
    String dateString = "";
    if(null != date)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateString = dateFormat.format(date);
    }
    return dateString;
}
Anoop Velluva
fonte
0

Então, estranhamente, o Excel importa uma data csv de maneiras diferentes. E os exibe de maneira diferente dependendo do formato usado no arquivo csv. Infelizmente, o formato ISO 8061 vem como uma string. O que o impede de reformatar a data por conta própria.

Todos os que vêm em data ... contêm toda a informação ... mas formatam de forma diferente ... se não gostar pode escolher um novo formato para a coluna no excel e vai funcionar. (Observação: você pode dizer que veio como uma data / hora válida, pois será justificado à direita ... se vier como uma string, será justificado à esquerda)

Aqui estão os formatos que testei:

"aaaa-MM-dd" aparece como uma data, claro, quando aberto no Excel. (também funciona "MM / dd / aaaa")

O formato de exibição padrão "aaaa-MM-dd HH: mm: ss" é "MM / dd / aaaa HH: mm" (data e hora sem segundos)

O formato de exibição padrão "aaaa-MM-dd HH: mm: ss.fff" é "HH: mm: ss" (tempo apenas c / segundos)

Brian Rice
fonte
-1

Dado um arquivo csv com uma coluna datetime neste formato: aaaa-mm-dd hh: mm: ss

O Excel mostra neste formato: dd / mm / aaaa hh: mm

por exemplo, 2020-05-22 16:40:55 mostra como 22/05/2020 16:40

Isso é evidentemente determinado pelo formato de data abreviada e horário abreviado selecionado no Windows; por exemplo, se eu alterar o formato de data abreviada no Windows para aaaa-mm-dd, o Excel mostrará 2020-05-22 16:40.

Irritantemente, não consigo encontrar nenhuma maneira de fazer o Excel mostrar os segundos automaticamente (tenho que formatar manualmente a coluna no Excel). Mas se o arquivo csv incluir uma coluna de tempo no formato hh: mm: ss (por exemplo, 16:40:55), isso é o que mostra no Excel, incluindo os segundos.

user13608643
fonte