Frage

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

War es hilfreich?

Lösung

Für zweite Genauigkeit, yyyy-MM-dd HH: mm:. Ss sollte es tun

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

Andere Tipps

Der frühere Vorschlag „yyyy-MM-dd HH: mm: ss“ zu verwenden, ist in Ordnung, obwohl ich glaube, Excel viel feinere Zeitauflösung als das hat. Ich finde diesen Beitrag eher glaubwürdig (den Faden folgen, und Sie werden viel Rechen- und das experimentieren mit Excel sehen), und wenn es richtig ist, werden Sie Ihre Millisekunden haben. Sie können nur am Ende auf Dezimalstellen tack, das heißt "yyyy-mm-dd hh: mm: ss.000".

Sie sollten sich bewusst sein, dass Excel kann die Daten nicht unbedingt formatieren (ohne menschliches Zutun) auf eine solche Weise, dass Sie all diese Präzision sehen. Auf meinem Computer bei der Arbeit, wenn ich eine CSV mit "yyyy-mm-dd hh: mm: ss.000" Setup-Daten (von Hand mit dem Editor), erhalte ich "mm: ss.0" in der Zelle und „m / d / yyyy hh: mm:. ss AM / PM“in der Bearbeitungsleiste

Für ein Maximum an Informationen [1] in den Zellen ohne menschliches Zutun gefördert wird, können Sie Ihre Zeitstempel in einen Datumsteil aufzuspalten und einen Zeitabschnitt, mit dem Zeitabschnitt nur auf den zweiten. Es scheint mir, wie Excel will man höchstens drei sichtbare „Ebene“ geben (wo Sekundenbruchteile ihre eigene Ebene) sind in jeder gegebenen Zelle, und Sie wollen sieben: Jahre, Monate, Tage, Stunden, Minuten, Sekunden, und Sekundenbruchteile.

Oder, wenn Sie den Zeitstempel nicht sein müssen für Menschen lesbare, aber Sie wollen es so genau wie möglich sein, können Sie es vorziehen, nur eine große Anzahl (intern, Excel wird nur die Anzahl der Tage mit, einschließlich Bruch Tage, da eine „Epoche“ Datum).


[1] Das heißt, numerische Informationen. Wenn Sie so viele Informationen wie möglich sehen mögen, aber nicht kümmern sich um Berechnungen mit ihm zu tun, könnten Sie etwas Format bilden, die Excel wird auf jeden Fall als String analysiert und damit allein lassen; z.B. "Yyyymmdd.hhmmss.000".

"yyyy-MM-dd hh: mm: ss.000" Format funktioniert nicht in allen Gegenden. Für einige (mindestens Danish) "yyyy-MM-dd hh: mm: ss, 000" wird besser funktionieren

.

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

Zu den Spracheinstellungen in der Systemsteuerung, dann auf Optionen Format, ein Gebietsschema wählen und das aktuelle Datum Format für das gewählte Gebietsschema von Windows-standardmäßig verwendet sehen. Ja, das Zeitformat ist locale-empfindlich. Excel verwendet diese Formate als CSV-Parsing.

Noch weiter, wenn das Gebietsschema Zeichen über ASCII verwendet, werden Sie CSV in der entsprechenden Pre-Unicode Windows- „ANSI“ Codepage emittieren müssen, z.B. CP1251. Excel wird nicht akzeptieren, UTF-8.

Wie für Zeitzonen. Ich habe die UTC als Sekunden von UTC-Offset speichern auf diese Weise Formeln in Excel / Openoffice schließlich Datetimes lokalisieren können. Ich fand diese leichter zu sein als eine beliebige Anzahl zu speichern, die eine 0 vor ihm hat. -0900 hat in einem beliebigen Tabellenkalkulationssystem nicht analysierte gut und importiert es fast unmöglich war, Menschen zu trainieren, zu tun.

  

"yyyy-mm-dd hh: mm: ss.000" Format funktioniert nicht in allen Gegenden. Zum   einige (zumindest Danish). "yyyy-mm-dd hh: mm: ss, 000" wird besser funktionieren

, wie durch user662894 geantwortet.

Ich möchte hinzufügen: Versuchen Sie nicht von den Mikrosekunden zu bekommen, sagen wir, SQL Server datetime2 Datentyp: Excel kann nicht mehr als 3 Sekundenbruchteile (das heißt Millisekunden) verarbeiten

.

So "yyyy-mm-dd hh: mm: ss.000000" wird nicht funktionieren, und wenn Excel diese Art von Zeichenfolge zugeführt wird (aus der CSV-Datei), wird es durchführen Rundung anstatt Abschneiden .

Dies kann in Ordnung sein, außer wenn mikrosekundengenau Angelegenheiten, in diesem Fall sind Sie besser dran sind durch keine automatische Datentyperkennung auszulösen, sondern halten nur die Zeichenfolge als Zeichenfolge ...

Versuchen MM / tt / hh: mm:. Ss-Format

Java-Code XML-Datei zu erstellen.

  
    

xmlResponse.append ( "mydate>"). Anhängen (this.formatDate (resultSet.getTimestamp ( "date"),     "MM / tt / hh: mm: ss a".)) Anhängen ( "");

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

So, Excel weirdly Importe ein csv Datum auf unterschiedliche Weise. und , zeigt sie auf das Format unterschiedlich, je in der CSV-Datei verwendet. Leider kommt das ISO 8061-Format als String in. Welche Sie verhindert, dass möglicherweise das Datum Neuformatierung selbst.

Alle diejenigen, die als Datum kommen in ... enthalten die gesamte Information ... aber sie formatiert anders ..., wenn Sie es nicht mögen, können Sie ein neues Format für die Spalte in Excel und wählen wird funktionieren. (Hinweis: Sie können es sagen, kommt als gültiges Datum / Zeit, da es direkt rechtfertigen ... wenn es in als String kommt, wird es rechtfertigen links)

Hier sind Formate I getestet:

"yyyy-MM-dd" zeigt als Datum natürlich, wenn in Excel geöffnet. (Auch als "MM / tt /" funktioniert)

"yyyy-MM-dd HH: mm: ss" Standard-Anzeigeformat "MM / tt / HH: mm" (Datum und Uhrzeit w / out Sekunden)

"yyyy-MM-DD HH: mm: ss.fff" Standard-Anzeigeformat ist "HH: mm: ss" (Zeit nur w / Sekunden)

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top