Pergunta

Eu estou escrevendo um arquivo CSV. Eu preciso escrever timestamps que são precisas pelo menos para o segundo, e de preferência para o milissegundo. Qual é o melhor formato para timestamps em um arquivo CSV de tal forma que eles podem ser analisados ??com precisão e de forma inequívoca pelo Excel com mínima intervenção do usuário?

Foi útil?

Solução

Para a segunda precisão, AAAA-MM-DD HH: mm:. Ss deve fazer o truque

Eu acredito Excel não é muito bom, com frações de segundo (perde-los ao interagir com um objeto COM IIRC).

Outras dicas

A sugestão anterior de usar "AAAA-MM-DD HH: mm: ss" é bom, embora eu acredito Excel tem resolução de tempo muito mais fina do que isso. Acho este post bastante credível (seguir o fio e você verá lotes de aritmética e experimentando com Excel), e se ele está correto, você terá seus milissegundos. Você pode apenas orçada em casas decimais, no final, isto é, "aaaa-mm-dd hh: mm: ss.000"

.

Você deve estar ciente que o Excel não pode necessariamente formatar os dados (sem intervenção humana), de tal forma que você vai ver tudo isso de precisão. No meu computador no trabalho, quando eu configurar um CSV com "hh aaaa-mm-dd: mm: ss.000" de dados (à mão usando o bloco de notas), eu recebo "mm: ss.0" na célula e "m / d / aaaa hh: mm:. ss AM / PM" na barra de fórmulas

Para obter informações máximo [1] transmitida nas células sem intervenção humana, você pode querer dividir o seu timestamp em uma parte de data e uma parte do tempo, com a parte do tempo apenas para o segundo. Parece-me como o Excel quer lhe dar, no máximo, três "níveis" visíveis (onde frações de segundo são seu próprio nível) em qualquer célula, e você quer sete: anos, meses, dias, horas, minutos e segundos, e fracções de segundo.

Ou, se você não precisa a hora de ser legível, mas você quer que ele seja tão preciso quanto possível, você pode preferir apenas para armazenar um número grande (internamente, Excel está apenas usando o número de dias, incluindo dias fracionários, desde uma data de "época").


[1] Isto é, informações numéricas. Se você quiser ver tanta informação quanto possível, mas não se preocupam com fazer cálculos com ele, você poderia fazer algum formato que o Excel vai certamente analisar como uma string, e, assim, deixar sozinho; por exemplo. "Yyyymmdd.hhmmss.000".

"hh AAAA-MM-dd: mm: ss.000" formato não trabalho em todas as localidades. Para alguns (pelo menos Dinamarquês) "hh AAAA-MM-dd: mm: ss, 000" irá funcionar melhor

.

Eu acredito que se você usou o tipo de dados double, o re-cálculo no Excel iria funcionar muito bem.

Vá para as configurações de idioma no Painel de Controle, em seguida, formatar Opções, selecione uma localidade e ver o formato da data atual para a localidade escolhida usado pelo Windows por padrão. Sim, esse formato timestamp é locale-sensível. Excel usa esses formatos ao analisar CSV.

Ainda mais, se as utiliza a localização caracteres além ASCII, você vai ter que emitem CSV no pré-Unicode do Windows página de código correspondente "ANSI", por exemplo, CP1251. Excel não aceita UTF-8.

Quanto aos fusos horários. Eu tenho que armazenar o deslocamento como segundos do UTC que maneira fórmulas em Excel / OpenOffice pode, eventualmente, localizar datetimes UTC. Eu encontrei este para ser mais fácil de armazenar qualquer número que tem um 0 na frente dele. -0900 não analisar bem em qualquer sistema de planilha e importá-lo era quase impossível de treinar pessoas para fazer.

"hh aaaa-mm-dd: mm: ss.000" formato não trabalho em todas as localidades. Para alguns (pelo menos Dinamarquês) "aaaa-mm-dd hh: mm: ss, 000". funcionará melhor

como respondeu por user662894.

Gostaria de acrescentar: não tente obter os microssegundos de, digamos, tipo de dados datetime2 do SQL Server:. Excel não consegue lidar com mais de 3 segundos fracionários (ou seja milissegundos)

Assim, "hh aaaa-mm-dd: mm: ss.000000" não vai funcionar, e quando Excel é alimentado este tipo de string (a partir do arquivo CSV), ele irá executar arredondamento em vez de truncamento .

Isso pode ser bom, exceto quando questões de precisão microssegundo, caso em que você é melhor fora de não acionar um reconhecimento automático de tipo de dados, mas apenas manter a corda como corda ...

Tente hh MM / DD / AAAA: mm:. Ss um formato

código Java para criar o arquivo XML.

xmlResponse.append ( "mydate>"). Append (this.formatDate (resultSet.getTimestamp ( "date"), "Mm / dd / aaaa hh: mm: ss a".)) De acréscimo ( "");

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

Então, estranhamente excel importações uma data CSV de diferentes maneiras. e , exibe-los de forma diferente dependendo do formato usado no arquivo CSV. Infelizmente o formato ISO 8061 vem como uma string. Que impede que você possivelmente reformatar a data de si mesmo.

Todas as que o não vêm em como uma data ... conter toda a informação ... mas eles formatar de forma diferente ... se você não gostar dele você pode escolher um novo formato para a coluna no excel e vai funcionar. (Nota: você pode dizer que veio como uma data / hora válida como ele vai justificar à direita ... se ele vem como uma cadeia que vai esquerda justificar)

Aqui estão os formatos que eu testei:

"AAAA-MM-DD" mostra-se como uma data claro quando aberto no excel. (Também "MM / DD / AAAA" obras)

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

"AAAA-MM-DD HH: mm: ss.fff" formato de exibição padrão é "HH: mm: ss" (o tempo só w / segundos)

Eu diria que ISO-formato é uma boa idéia. ( Wikipedia artigo , também com informações em tempo)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top