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?
110
Antworten:
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).
quelle
strftime
, ist die entsprechende Argumentzeichenfolge"%Y-%m-%d %H:%M:%S"
.CSV
ist 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)."%Y-%m-%d %H:%M:%S"
- dasselbe wie in Ruby.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".
quelle
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.
quelle
Ich glaube, wenn Sie den
double
Datentyp verwenden würden, würde die Neuberechnung in Excel gut funktionieren.quelle
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.
quelle
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.
quelle
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 ...
quelle
Ich würde vermuten, dass das ISO-Format eine gute Idee ist. ( Wikipedia-Artikel , auch mit Zeitinfo)
quelle
Versuchen Sie es mit MM / TT / JJJJ HH: MM: SS als Format.
Java-Code zum Erstellen einer XML-Datei.
quelle
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).
quelle
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.
quelle