Il miglior formato di timestamp per CSV / Excel?


110

Sto scrivendo un file CSV. Ho bisogno di scrivere timestamp che siano accurati almeno al secondo e preferibilmente al millisecondo. Qual è il formato migliore per i timestamp in un file CSV in modo che possano essere analizzati in modo accurato e inequivocabile da Excel con un intervento minimo da parte dell'utente?


che lingua stai usando per creare l'output?
Peter Perháč

Risposte:


104

Per una seconda precisione, yyyy-MM-dd HH: mm: ss dovrebbe fare il trucco.

Credo che Excel non sia molto buono con le frazioni di secondo (le perde quando interagisce con l'oggetto COM IIRC).


Sì, sono d'accordo con te e Fredrik. Se potessi scovare quei riferimenti, te ne sarei sicuramente grato. Grazie!

18
Per chiunque utilizzi Ruby strftime, la stringa dell'argomento equivalente è"%Y-%m-%d %H:%M:%S"
Greg Matthew Crossley,

2
@nickf - .CSVè solo un file di testo. Puoi mostrare il fuso orario o qualsiasi altra cosa che scrivi nel file come testo normale separato da virgole; ciò che è importante è quello che domanda sarà la lettura , e come che l'applicazione è in attesa del testo. Ecco la documentazione per lo standard CSV dalla Library of Congress. Non esiste un modo prescritto per memorizzare in modo specifico le date. Anche 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

In python con strftime () il formato sarebbe anche "%Y-%m-%d %H:%M:%S"- lo stesso di Ruby.
rcronk

18

Il suggerimento precedente di utilizzare "aaaa-MM-gg HH: mm: ss" va bene, anche se credo che Excel abbia una risoluzione temporale molto più precisa di quella. Trovo questo post piuttosto credibile (segui il thread e vedrai molta aritmetica e sperimentazione con Excel), e se è corretto, avrai i tuoi millisecondi. Puoi semplicemente virare sulle cifre decimali alla fine, ad esempio "aaaa-mm-gg hh: mm: ss.000".

È necessario essere consapevoli del fatto che Excel potrebbe non formattare necessariamente i dati (senza intervento umano) in modo tale da visualizzare tutta quella precisione. Sul mio computer al lavoro, quando imposto un CSV con dati "aaaa-mm-gg hh: mm: ss.000" (a mano utilizzando Blocco note), ottengo "mm: ss.0" nella cella e "m / g / aaaa hh: mm: ss AM / PM "nella barra della formula.

Per la massima informazione [1] trasmessa nelle celle senza intervento umano, potresti voler suddividere il tuo timestamp in una porzione di data e una porzione di tempo, con la porzione di tempo solo al secondo. Mi sembra che Excel voglia darti al massimo tre "livelli" visibili (dove le frazioni di secondo sono il loro livello) in una data cella e vuoi sette: anni, mesi, giorni, ore, minuti, secondi, e frazioni di secondo.

Oppure, se non hai bisogno che il timestamp sia leggibile dall'uomo ma desideri che sia il più accurato possibile, potresti preferire semplicemente memorizzare un numero grande (internamente, Excel utilizza solo il numero di giorni, comprese le frazioni di giorni , poiché una data "d'epoca").


[1] Cioè, informazioni numeriche. Se vuoi vedere quante più informazioni possibili ma non ti interessa fare calcoli con esso, potresti creare un formato che Excel analizzerà sicuramente come una stringa e quindi lascerà stare; ad esempio "aaaammgg.hhmmss.000".


14

Il formato "aaaa-MM-gg hh: mm: ss.000" non funziona in tutte le lingue. Per alcuni (almeno danesi) "yyyy-MM-dd hh: mm: ss, 000" funzionerà meglio.


2
Stranamente Excel 2010 non rileva le date in cui la parte in millisecondi è 000. Qualsiasi altra va bene.
Dio F

4

Credo che se usassi il doubletipo di dati, il ricalcolo in Excel funzionerebbe perfettamente.


Ho appena provato e funziona davvero bene. Devo solo dire a Excell che il formato di quella particolare colonna è Data / Ora. Non lo rileverà automaticamente dal CSV in quanto ovviamente non descrive i dati
Peter Perháč

3

Vai alle impostazioni della lingua nel Pannello di controllo, quindi Opzioni formato, seleziona una lingua e visualizza il formato della data effettivo per la lingua scelta utilizzata da Windows per impostazione predefinita. Sì, il formato del timestamp dipende dalle impostazioni locali. Excel utilizza questi formati durante l'analisi di CSV.

Inoltre, se la locale utilizza caratteri oltre ASCII, dovrai emettere CSV nella tabella codici "ANSI" di Windows precedente Unicode corrispondente, ad esempio CP1251. Excel non accetterà UTF-8.


1

Per quanto riguarda i fusi orari. Devo memorizzare l'offset UTC come secondi da UTC in questo modo le formule in Excel / OpenOffice possono eventualmente localizzare i datetimes. Ho trovato più facile che memorizzare qualsiasi numero che ha uno 0 davanti. -0900 non veniva analizzato bene in nessun sistema di fogli di calcolo e l'importazione era quasi impossibile da addestrare alle persone.


1

Il formato "aaaa-mm-gg hh: mm: ss.000" non funziona in tutte le lingue. Per alcuni (almeno danesi) "aaaa-mm-gg hh: mm: ss, 000" funzionerà meglio.

come ha risposto user662894.

Voglio aggiungere: non cercare di ottenere i microsecondi, ad esempio, dal tipo di dati datetime2 di SQL Server: Excel non può gestire più di 3 secondi frazionari (cioè millisecondi).

Quindi "yyyy-mm-dd hh: mm: ss.000000" non funzionerà e quando Excel riceve questo tipo di stringa (dal file CSV), eseguirà l' arrotondamento anziché il troncamento .

Questo può andare bene tranne quando la precisione del microsecondo è importante, nel qual caso è meglio NON attivare un riconoscimento automatico del tipo di dati ma mantenere la stringa come stringa ...


0

Immagino che il formato ISO sia una buona idea. ( Articolo di Wikipedia , anche con informazioni sull'ora)


1
(voto negativo; in realtà, no, Excel non riconosce quel formato)
Doug

1
@Doug Ho appena eseguito un test per verificarlo: funziona bene in Office 2010, edizione inglese, provato con entrambe le mie impostazioni locali (svedese, che utilizza il formato ISO per le date, e inglese americano). Per interesse: in quale ambiente è fallito per te? Non sono per niente sorpreso che funzioni per alcuni e fallisca per alcuni: Excel non è davvero una meraviglia di coerenza nella mia esperienza ...
Fredrik Mörk

1
Sicuramente non funziona in Office 2012 per OSX. L'unico formato "nativo" che Excel sembra riconoscere nei miei test è stato MM / DD / YYYY HH: MM: SS; tutto il resto è stato semplicemente trattato come testo.
Doug

1
Ho trovato questa domanda dopo aver scoperto che Excel non riconosceva le date in formato ISO in un CSV. IMO, questo è un bug in Excel.
billpg

2
Potrebbe essere, @Patrick. È stato un po 'difficile da testare nel 2009 ;-)
Fredrik Mörk

0

Prova MM / gg / aaaa hh: mm: ss un formato.

Codice Java per creare file XML.

xmlResponse.append ("mydate>"). append (this.formatDate (resultSet.getTimestamp ("date"), "MM / dd / yyyy 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;
}

0

Quindi, stranamente Excel importa una data CSV in modi diversi. Inoltre , li visualizza in modo diverso a seconda del formato utilizzato nel file csv. Sfortunatamente il formato ISO 8061 arriva come una stringa. Il che ti impedisce di riformattare la data da solo.

Tutti quelli che arrivano come una data ... contengono tutte le informazioni ... ma si formattano in modo diverso ... se non ti piace puoi scegliere un nuovo formato per la colonna in Excel e funzionerà. (Nota: puoi dire che è arrivata come una data / ora valida in quanto giustificherà a destra ... se arriva come una stringa verrà giustificata a sinistra)

Ecco i formati che ho testato:

"yyyy-MM-dd" appare come una data ovviamente quando viene aperto in Excel. (funziona anche "MM / dd / yyyy")

"aaaa-MM-gg HH: mm: ss" il formato di visualizzazione predefinito è "MM / gg / aaaa HH: mm" (data e ora senza secondi)

"aaaa-MM-gg HH: mm: ss.fff" il formato di visualizzazione predefinito è "HH: mm: ss" (solo tempo con secondi)


-1

Dato un file CSV con una colonna data / ora in questo formato: aaaa-mm-gg hh: mm: ss

Excel lo mostra in questo formato: gg / mm / aaaa hh: mm

ad esempio, 2020-05-22 16:40:55 viene visualizzato come 22/05/2020 16:40

Ciò è evidentemente determinato dal formato Data breve e Ora breve selezionati in Windows; ad esempio, se cambio il formato data breve in Windows in aaaa-mm-gg, Excel mostra 2020-05-22 16:40.

Fastidiosamente, non riesco a trovare alcun modo per far sì che Excel mostri automaticamente i secondi (devo formattare manualmente la colonna in Excel). Ma se il file csv include una colonna dell'ora in formato hh: mm: ss (ad esempio 16:40:55), questo è ciò che viene mostrato in Excel, inclusi i secondi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.