Spreadsheet: Wie formatiere ich ein Datum (date) als Timestamp und anderen Formaten?

Im Spreadsheet kann man über Freemarker-Spezialausdruck ${.now} auf das aktuelle Datum zugreifen:

image

Die Beispielausgabe erfolgt, weil im Hintergrund die Standardausgabe eines Date Objektes ausgegeben wird.

Will man nun diese Date-Objekt umformatieren, dann helfen folgende Beispiele weiter:

Code Beispielwert Beschreibung
${.now?long / 1000} 1621343367 Unix Timestamp in Sekunden
${.now?long} 1621343367681 Timestamp in Millisekunden
${.now?string(„yyyy.MM.dd HH:mm:ss“)} 2021.05.18 15:09:27
${.now?string(„yyyy.MM.dd“)} 2021.05.18
${.now} May 18, 2021 3:09:27 PM

Weitere Beispiele

Date vs. Strings

Hinweis
Die obigen Beispiele funktionieren immer, wenn man ein -Objekt benutzt, wie es bei ${.now} der Fall ist.
Hat man stattdessen wie oft ein Datum als String an der Hand, dann muss dieser String erst in ein Date- oder DateTime-Objekt umgewandelt werden.

Danach kann wie oben die Umwandlung vorgenommen werden.
z.B.

HTML

${"1995-10-25 03:05 PM"?datetime("yyyy-MM-dd hh:mm a")?string("dd.MM.yyyy")}

Weitere Beispiele um ein als String gegebenes Datum zu parsen und umzuformatieren

Gegebenes Datum als String (Zeichenkette): 2017-11-27T14:49:48+01:00

Einlesen / Parsing als Datum:

HTML

${"2017-11-27T14:49:48+01:00"?datetime("yyyy-MM-dd'T'HH:mm:ssXXX")}

Hierbei ist wichtig, dass das Datumsformat-Pattern (hier yyyy-MM-dd’T’HH:mm:ssXXX) auch dem tatsächlichen Datum entspricht.

und so könnte man es umformatieren:

HTML

${"2017-11-27T14:49:48+01:00"?datetime("yyyy-MM-dd'T'HH:mm:ssXXX")?string("dd.MM.yyyy HH:mm")}

Analog funktioniert dieses Beispiel bei zusätzlicher Angabe von Millisekunden.

Beispiel: 2017-11-27T14:49:48**.000**+01:00

HTML

${"2017-11-27T14:49:48.000+01:00"?datetime("yyyy-MM-dd'T'HH:mm:ss.sssXXX")?string("dd.MM.yyyy HH:mm")}

Das hartcodierte Datum in diesem Beispiel kann durch entsprechende Variablen (Spalten) ersetzt werden.

Hinweis: dass XXX im Format-Pattern entspricht dem Timezone-Anteil +01:00. Für +01 würde man nur ein X schreiben (Quelle)

Weitere Beispiele

Aktuelles Datum in das Zielformat umwandeln:

HTML

${.now?string("yyyy-MM-dd'T'HH:mm:ss.S'Z'")}

Ausgabe: 2021-02-22T11:39:49.885Z

Quelldatum parsen:

HTML

${"2021-02-19T17:33:12+01:00"?datetime.iso}

oder

HTML

${"2021-02-19T17:33:12+01:00"?datetime("yyyy-MM-dd'T'HH:mm:ssXXX")}

dass XXX im Format-Pattern entspricht dem Timezone-Anteil +01:00. Für +01 würde man nur ein X schreiben

Quelldatum parsen und in Zielformat umwandeln

HTML

${"2021-02-19T17:33:12+01:00"?datetime.iso?string("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")}

oder

HTML

${"2021-02-19T17:33:12+01:00"?datetime("yyyy-MM-dd'T'HH:mm:ssXXX")?string("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")}

Ausgabe: 2021-02-19T17:33:12.000Z

relevante Freemarker Dokumentation