web-dev-qa-db-de.com

Bestes Zeitstempelformat für CSV/Excel?

Ich schreibe eine CSV-Datei. Ich muss Zeitstempel schreiben, die mindestens auf die Sekunde und vorzugsweise auf die Millisekunde genau sind. Welches 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?

93
Jon

Für die zweite Genauigkeit sollte JJJJ-MM-TT HH: mm: ss den Trick ausführen.

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

82
Joe

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 eher glaubwürdig (folge dem Thread und du wirst viel Arithmetik sehen und mit Excel experimentieren), und wenn es richtig ist, hast du deine Millisekunden. Sie können am Ende nur Dezimalstellen anheften, d. H. "Jjjj-mm-tt hh: mm: ss.000".

Sie sollten wissen, dass Excel die Daten nicht notwendigerweise (ohne Eingreifen des Benutzers) so formatieren muss, dass Sie all diese Genauigkeit sehen. Wenn ich auf meinem Computer bei der Arbeit einen CSV mit "yyyy-mm-dd hh: mm: ss.000" -Daten (von Hand mit dem Notepad) eingerichtet habe, erhalte ich in der Zelle "mm: ss.0" und "m/d/jjjj hh: mm: ss AM/PM "in der Bearbeitungsleiste.

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 den zweiten Wert fällt. Es sieht für mich so aus, als würde Excel Ihnen in einer beliebigen Zelle höchstens drei sichtbare "Stufen" (wobei Sekundenbruchteile ihre eigenen Stufen sind) geben, und Sie möchten sieben: Jahre, Monate, Tage, Stunden, Minuten, Sekunden, und Sekundenbruchteile.

Wenn Sie den Zeitstempel nicht für die Anzeige durch den Menschen benötigen, aber so genau wie möglich sein möchten, können Sie es vorziehen, nur eine große Zahl zu speichern (intern verwendet Excel nur die Anzahl der Tage, einschließlich Bruchtage) (seit einem "Epoch" -Datum).


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

15
John Y

Das Format "JJJJ-MM-TT hh: mm: ss.000" funktioniert nicht in allen Gebietsschemas. Für einige (mindestens dänische) "JJJJ-MM-TT hh: mm: ss, 000" wird es besser funktionieren.

12
user662894

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

4
Peter Perháč

Gehen Sie zu den Spracheinstellungen in der Systemsteuerung, dann Formatierungsoptionen, 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 Analysieren von CSV.

Wenn das Gebietsschema andere Zeichen als ASCII verwendet, müssen Sie außerdem CSV in der entsprechenden Vor-Unicode-Windows-ANSI-Codepage ausgeben, z. CP1251. UTF-8 wird von Excel nicht akzeptiert.

3
John Smith

Das Format "jjjj-mm-tt hh: mm: ss.000" funktioniert nicht in allen Gebietsschemas. Zum Einige (mindestens dänische) "JJJJ-MM-TT HH: MM: SS, 000" werden besser funktionieren.

wie von user662894 geantwortet.

Ich möchte hinzufügen: Versuchen Sie nicht, die Mikrosekunden aus dem Datetime2-Datentyp von SQL Server zu erhalten: Excel kann nicht mehr als 3 Sekundenbruchteile (d. H. Millisekunden) verarbeiten.

"Yyyy-mm-dd hh: mm: ss.000000" funktioniert daher nicht. Wenn Excel diese Art von Zeichenfolge (aus der CSV-Datei) eingespeist wird, führt es rounding statt truncation.

Dies kann in Ordnung sein, es sei denn, es ist eine Genauigkeit im Mikrosekundenbereich. In diesem Fall ist es besser, wenn Sie NICHT eine automatische Datentyperkennung auslösen, sondern die Zeichenfolge als Zeichenfolge beibehalten.

1
Hansjp

Wie für Zeitzonen. Ich muss den UTC-Versatz als Sekunden von UTC speichern, damit Formeln in Excel/OpenOffice die Zeitangaben lokalisieren können. Ich habe festgestellt, dass dies einfacher ist als das Speichern einer Zahl mit einer 0. -0900 parkte in keinem Spreadsheet-System gut und der Import war fast unmöglich, Leute dazu zu schulen.

1
whardier

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

Alle, die Sie als Datum eingeben ... enthalten die gesamten Informationen ... aber sie werden anders formatiert ... Wenn Sie es nicht mögen, können Sie ein neues Format für die Spalte in Excel auswählen, und es funktioniert. (Hinweis: Sie können erkennen, dass es ein gültiges Datum und eine gültige Zeit war, da es sich als richtig erweisen wird ... wenn es als Zeichenfolge kommt, wird es als Rechtseinstellung angegeben.)

Hier sind Formate, die ich getestet habe:

"jjjj-MM-tt" wird beim Öffnen in Excel natürlich als Datum angezeigt. (auch "MM/TT/JJJJ" funktioniert)

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

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

0
Brian Rice

Versuchen Sie MM/TT/JJJJ hh: mm: ss ein 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;
}
0
Anoop Velluva