Bestes Zeitstempelformat für CSV / Excel?

110

Ich schreibe eine CSV-Datei. Ich muss Zeitstempel schreiben, die mindestens auf die Sekunde und vorzugsweise auf die Millisekunde genau sind. Was ist das beste Format für Zeitstempel in einer CSV-Datei, damit sie von Excel mit minimalem Benutzereingriff genau und eindeutig analysiert werden können?


quelle
Welche Sprache verwenden Sie zum Erstellen der Ausgabe?
Peter Perháč

Antworten:

103

Für die zweite Genauigkeit sollte JJJJ-MM-TT HH: MM: SS den Trick machen.

Ich glaube, Excel ist mit Sekundenbruchteilen nicht sehr gut (verliert sie bei der Interaktion mit dem COM-Objekt IIRC).

Joe
quelle
Ja - ich stimme dir und Fredrik zu. Wenn Sie diese Referenzen ausgraben könnten, wäre ich Ihnen sicherlich dankbar. Vielen Dank!
18
Für jeden, der Ruby's verwendet strftime, ist die entsprechende Argumentzeichenfolge"%Y-%m-%d %H:%M:%S"
Greg Matthew Crossley
2
@nickf - .CSVist nur eine Textdatei. Sie können die Zeitzone oder alles andere, was Sie in die Datei schreiben, als durch Kommas getrennten Klartext anzeigen. Wichtig ist, welche Anwendung es liest und wie diese Anwendung den Text erwartet. Hier ist die Dokumentation zum CSV-Standard aus der Library of Congress. Es gibt keine vorgeschriebene Möglichkeit, Daten speziell zu speichern. Auch RFC-4180 und CSV-1203 ( //creativyst.com/Doc/Articles/CSV/CSV01.htm).
Ashleedawg
C # / IronPython File.GetLastWriteTimeUtc ("Ihr-Pfad-hier"). ToString ("JJJJ-% m-% d% H:% MM:% ss")
Konrads
In Python mit strftime () wäre das Format ebenfalls "%Y-%m-%d %H:%M:%S"- dasselbe wie in Ruby.
Rcronk
18

Der frühere Vorschlag, "JJJJ-MM-TT HH: MM: SS" zu verwenden, ist in Ordnung, obwohl ich glaube, dass Excel eine viel feinere Zeitauflösung als diese hat. Ich finde diesen Beitrag ziemlich glaubwürdig (folgen Sie dem Thread und Sie werden viel rechnen und mit Excel experimentieren), und wenn er korrekt ist, haben Sie Ihre Millisekunden. Sie können am Ende einfach Dezimalstellen anheften, dh "JJJJ-MM-TT HH: MM: SS.000".

Sie sollten sich bewusst sein, dass Excel die Daten möglicherweise nicht unbedingt (ohne menschliches Eingreifen) so formatiert, dass Sie all diese Präzision sehen. Wenn ich auf meinem Computer bei der Arbeit eine CSV mit Daten "JJJJ-MM-TT HH: MM: SS.000" (von Hand mit Notepad) einrichte, erhalte ich "MM: SS.0" in der Zelle und "m" / t / jjjj hh: mm: ss AM / PM "in der Formelleiste.

Für maximale Informationen [1], die in den Zellen ohne menschliches Eingreifen übermittelt werden, möchten Sie möglicherweise Ihren Zeitstempel in einen Datums- und einen Zeitabschnitt aufteilen, wobei der Zeitabschnitt nur auf die Sekunde beschränkt ist. Für mich sieht es so aus, als ob Excel Ihnen höchstens drei sichtbare "Ebenen" (wobei Sekundenbruchteile ihre eigene Ebene sind) in einer bestimmten Zelle geben möchte, und Sie möchten sieben: Jahre, Monate, Tage, Stunden, Minuten, Sekunden, und Bruchteile einer Sekunde.

Wenn Sie nicht möchten, dass der Zeitstempel für den Menschen lesbar ist, er aber so genau wie möglich sein soll, möchten Sie möglicherweise nur eine große Zahl speichern (intern verwendet Excel nur die Anzahl der Tage, einschließlich gebrochener Tage , seit einem "Epochendatum").


[1] Das heißt, numerische Informationen. Wenn Sie so viele Informationen wie möglich anzeigen möchten, aber keine Berechnungen damit durchführen möchten, können Sie ein Format erstellen, das Excel definitiv als Zeichenfolge analysiert und somit in Ruhe lässt. zB "yyyymmdd.hhmmss.000".

John Y.
quelle
14

Das Format "JJJJ-MM-TT HH: MM: SS.000" funktioniert nicht in allen Ländereinstellungen. Für einige (zumindest dänische) "JJJJ-MM-TT hh: mm: ss, 000" wird besser funktionieren.

user662894
quelle
2
Seltsamerweise erkennt Excel 2010 keine Daten, wenn der Millisekunden-Teil 000 ist. Jeder andere reicht aus.
Dio F
4

Ich glaube, wenn Sie den doubleDatentyp verwenden würden, würde die Neuberechnung in Excel gut funktionieren.

Peter Perháč
quelle
Ich habe es gerade versucht und es funktioniert wirklich gut. Ich muss Excell nur mitteilen, dass das Format dieser bestimmten Spalte Datum / Uhrzeit ist. Es wird dies nicht automatisch aus der CSV erkennen, da es offensichtlich die Daten nicht beschreibt
Peter Perháč
3

Gehen Sie zu den Spracheinstellungen in der Systemsteuerung und dann zu Formatoptionen, wählen Sie ein Gebietsschema aus und sehen Sie das tatsächliche Datumsformat für das von Windows standardmäßig verwendete Gebietsschema. Ja, dieses Zeitstempelformat ist vom Gebietsschema abhängig. Excel verwendet diese Formate beim Parsen von CSV.

Wenn das Gebietsschema Zeichen jenseits von ASCII verwendet, müssen Sie CSV in der entsprechenden Windows-ANSI-Codepage vor Unicode ausgeben, z. B. CP1251. Excel akzeptiert kein UTF-8.

John Smith
quelle
1

Wie für Zeitzonen. Ich muss den UTC-Versatz als Sekunden von UTC speichern, damit Formeln in Excel / OpenOffice eventuell Datenzeiten lokalisieren können. Ich fand das einfacher als das Speichern einer Zahl, vor der eine 0 steht. -0900 wurde in keinem Tabellenkalkulationssystem gut analysiert, und das Importieren war fast unmöglich, um die Leute dazu zu schulen.

whardier
quelle
1

Das Format "JJJJ-MM-TT HH: MM: SS.000" funktioniert nicht in allen Ländereinstellungen. Für einige (zumindest dänische) "JJJJ-MM-TT HH: MM: SS, 000" wird besser funktionieren.

wie von user662894 beantwortet.

Ich möchte hinzufügen: Versuchen Sie nicht, die Mikrosekunden beispielsweise vom Datentyp datetime2 von SQL Server abzurufen: Excel kann nicht mehr als 3 Sekundenbruchteile (dh Millisekunden) verarbeiten.

"JJJJ-MM-TT HH: MM: SS.000000" funktioniert also nicht. Wenn Excel diese Art von Zeichenfolge (aus der CSV-Datei) zugeführt wird, wird eher eine Rundung als eine Kürzung durchgeführt .

Dies kann in Ordnung sein, außer wenn die Genauigkeit von Mikrosekunden von Bedeutung ist. In diesem Fall sind Sie besser dran, wenn Sie KEINE automatische Datentyperkennung auslösen, sondern nur die Zeichenfolge als Zeichenfolge beibehalten ...

Hansjp
quelle
0

Ich würde vermuten, dass das ISO-Format eine gute Idee ist. ( Wikipedia-Artikel , auch mit Zeitinfo)

Fredrik Mörk
quelle
1
(Downvote; eigentlich nein, Excel erkennt dieses Format nicht)
Doug
1
@Doug Ich habe gerade einen Test durchgeführt, um dies zu überprüfen: Funktioniert einwandfrei in Office 2010, englische Ausgabe, versucht mit meinen beiden lokalen Einstellungen (Schwedisch, das zufällig das ISO-Format für Datumsangaben verwendet, und US-Englisch). Aus Interesse: In welchem ​​Umfeld ist es für Sie gescheitert? Ich bin nicht im geringsten überrascht, dass es für einige funktioniert und für einige fehlschlägt: Excel ist in meiner Erfahrung kein Wunder der Beständigkeit ...
Fredrik Mörk
1
In Office 2012 für OSX funktioniert es definitiv nicht. Das einzige "native" Format, das Excel in meinen Tests zu erkennen scheint, war MM / TT / JJJJ HH: MM: SS; alles andere wurde einfach als Text behandelt.
Doug
1
Ich habe diese Frage gefunden, nachdem ich festgestellt habe, dass Excel Daten im ISO-Format in einer CSV nicht erkannt hat. IMO, das ist ein Fehler in Excel.
Billpg
2
Das kann sein, @Patrick. Das war 2009 ein bisschen schwer zu testen ;-)
Fredrik Mörk
0

Versuchen Sie es mit MM / TT / JJJJ HH: MM: SS als Format.

Java-Code zum Erstellen einer XML-Datei.

xmlResponse.append ("mydate>"). append (this.formatDate (resultSet.getTimestamp ("date"), "MM / tt / jjjj 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
quelle
0

Seltsamerweise importiert Excel ein CSV-Datum auf verschiedene Arten. Und zeigt sie je nach Format in der CSV-Datei unterschiedlich an. Leider wird das ISO 8061-Format als Zeichenfolge geliefert. Dies verhindert, dass Sie das Datum möglicherweise selbst neu formatieren.

Alle, die als Datum eingehen ... enthalten die gesamten Informationen ... aber sie werden anders formatiert ... Wenn es Ihnen nicht gefällt, können Sie ein neues Format für die Spalte in Excel auswählen, und es wird funktionieren. (Hinweis: Sie können erkennen, dass es als gültiges Datum / gültige Uhrzeit eingegeben wurde, da dies rechtfertigt. Wenn es als Zeichenfolge eingeht, wird es rechtsbündig angezeigt.)

Hier sind die Formate, die ich getestet habe:

"yyyy-MM-dd" wird natürlich als Datum angezeigt, wenn es in Excel geöffnet wird. (auch "MM / TT / JJJJ" funktioniert)

Das Standardanzeigeformat "JJJJ-MM-TT HH: MM: SS" ist "MM / TT / JJJJ HH: MM" (Datum und Uhrzeit ohne Sekunden).

Das Standardanzeigeformat "JJJJ-MM-TT HH: mm: ss.fff" ist "HH: mm: ss" (nur Zeit w / Sekunden).

Brian Rice
quelle
-1

Bei einer CSV-Datei mit einer Datums- / Uhrzeitspalte in diesem Format: JJJJ-MM-TT HH: MM: SS

Excel zeigt es in diesem Format: TT / MM / JJJJ HH: MM

zB 2020-05-22 16:40:55 zeigt als 22/05/2020 16:40

Dies wird offensichtlich durch das in Windows ausgewählte Format für kurzes Datum und kurze Zeit bestimmt. Wenn ich beispielsweise das kurze Datumsformat in Windows in JJJJ-MM-TT ändere, zeigt Excel 2020-05-22 16:40 an.

Ärgerlicherweise kann ich keine Möglichkeit finden, Excel die Sekunden automatisch anzeigen zu lassen (ich muss die Spalte in Excel manuell formatieren). Wenn die CSV-Datei jedoch eine Zeitspalte im Format hh: mm: ss enthält (z. B. 16:40:55), wird dies in Excel einschließlich der Sekunden angezeigt.

user13608643
quelle