ubuntuusers.de

Datum in formatierten String umwandeln

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

Purpur

Avatar von Purpur

Anmeldungsdatum:
15. Mai 2005

Beiträge: 378

Hallo alle,

mit

1
2
alex@shuttle:~$ date
Di 4. Jan 11:18:10 CET 2022

erhalte ich (natürlich) Datum + Uhrzeit. Ich brauche jedoch eine andere Formatierung in der Form:

YYYYMMDDHHMMSS ⇒ 20220104111810

Ob das nun eine Zahl oder Text ist, spielt eigentlich keine Rolle.
Das Ergebnis brauche ich, um eindeutige Namen für temporäre Dateien zu erzeugen.
Kennt jemand von euch dazu einen cleveren Einzeiler?

Euch allen eine gutes und gesundes neues Jahr.

Grüße
Alexander

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14393

Purpur schrieb:

Ob das nun eine Zahl oder Text ist, spielt eigentlich keine Rolle.
Das Ergebnis brauche ich, um eindeutige Namen für temporäre Dateien zu erzeugen.

Dann könntest Du das Datum auch als timestamp benutzen. Siehe z. B. die Ausgabe von:

date +%s

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Wohnort: Berlin

Vielleicht ist Lubux Tipp genau das Richtige für Dich, aber vielleicht soll es auch ohne Hilfsmittel entzifferbar sein:

1
zeitstempel=$(date "+%Y%m%d%H%M%S")
1
date --help

zeigt Dir weitere Alternativen.

Du kannst nach Belieben Trenner und Dekoration einbauen, beispielsweise

1
2
date "+%Y.%m.%d_%H-%M-%S"
2022.01.04_12-16-18

- das ist Dateinamenfreundlich und besser lesbar, während "2022/01/04" nicht ginge, wegen der Slashes, und "12:19:37" ist schwierig, wenn Du noch Kontakt zu Windowsusern hast, bei denen Doppelpunkte für Partitionsbuchstaben verwendet werden.

Purpur

(Themenstarter)
Avatar von Purpur

Anmeldungsdatum:
15. Mai 2005

Beiträge: 378

Hi lubux,
dein Tip führt in die richtige Richtung.
Danke dafür.

Hi user_unknown,
das war es, was ich gesucht habe. Besten Dank für den Schubs.
Ein Datenaustausch auf Win-Platformen ist eigentlich nicht vorgesehen. Insofern stünden mir alle Formatierungsvarianten zur Verfügung.

1
date "+%Y%m%d%H%M%S"

ist jedoch genau das Richtige. Weil der String so schön minimalistisch ist, eindeutig, stets wachsend und deshalb prima sortier- und durchsuchbar. Und sich auch gut für andere Zwecke einsetzen lässt - u.a. als nie gleicher Startparameter zur Erzeugung von Zufallszahlen.

Herzlichen Dank euch beiden fürs Mitdenken & Grüße,
Alexander

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13231

Purpur schrieb:

1
date "+%Y%m%d%H%M%S"

ist jedoch genau das Richtige. Weil der String so schön minimalistisch ist, eindeutig, stets wachsend und deshalb prima sortier- und durchsuchbar.

Ich würde wenigstens einen Trenner zwischen Datum und Zeit einbauen, es sei denn, es muss rein numerisch sein. Z.B.

1
date '+%Y%m%d-%H%M%S'

Und sich auch gut für andere Zwecke einsetzen lässt - u.a. als nie gleicher Startparameter zur Erzeugung von Zufallszahlen.

Das machen Zufallszahlgeneratoren, die was auf sich halten, üblicherweise schon. uuidgen nutzt z.B. /dev/random, das physikalischen Input nutzt (siehe man -s 7 random).

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Wohnort: Berlin

rklm schrieb:

Purpur schrieb:

1
date "+%Y%m%d%H%M%S"

ist jedoch genau das Richtige. Weil der String so schön minimalistisch ist, eindeutig, stets wachsend und deshalb prima sortier- und durchsuchbar.

Es bleibt so eindeutig und sortierbar, wenn Du immer die gleichen Trenner verwendest (und nicht über 8000 Jahre lebst).

Ich würde wenigstens einen Trenner zwischen Datum und Zeit einbauen, es sei denn, es muss rein numerisch sein. Z.B.

Ja. Sobald Du mehr als 1x draufschaust, insbes. im Monat Februar, solltest Du an Ergonomie nicht sparen.

An Ergonomie sollte man so gut wie nie sparen!

Purpur

(Themenstarter)
Avatar von Purpur

Anmeldungsdatum:
15. Mai 2005

Beiträge: 378

user_unknown schrieb:
... insbes. im Monat Februar, solltest Du an Ergonomie nicht sparen.

Hi user_unknown,
Ja, besondere Freude kommt auf am 2., 20. und am 22. Februar 2022 ☺

Zum Thema Übersicht ließ mal hier, da und dort.

Wenn du jemanden in den ultimativen Wahnsinn treiben willst, lass ihn damit arbeiten. Debugging käme dann wohl ZEN recht nahe.

Viel Spaß wünscht,
Alexander 😇

<edit> Bildchen beigefügt. </edit>

Bilder

Nobuddy

Avatar von Nobuddy

Anmeldungsdatum:
2. September 2005

Beiträge: 6990

Wohnort: 29614 Soltau

Ich finde den Vorschlag von user_unknown, einfach und eindeutig. Bei visuellem Überblick, ist eine gute Lesbarkeit (Erkennung) von Vorteil.

Du sprichst von temporären Dateien, was hast Du damit letztendlich vor? Sollen diese dauerhaft gespeichert werden, oder sind diese nur kurzfristig von Bedeutung?

Bei langfristiger Speicherung der Dateien in dem Format "zeitstempel=$(date "+%Y%m%d%H%M%S")", ist letztendlich nicht zu erkennen, um was für eine Datei und um welchen Inhalt es sich handelt. Spätestens hier sollte man sich Gedanken um eine entsprechende Lesbarkeit machen, damit das auch langfristig nachvollziehbar ist und bleibt.

Letztendlich, geht es nicht um einen Einzeiler, sondern was Du damit erreichen willst!

Purpur

(Themenstarter)
Avatar von Purpur

Anmeldungsdatum:
15. Mai 2005

Beiträge: 378

Nobuddy schrieb:

Ich finde den Vorschlag von user_unknown, einfach und eindeutig.

Das sehe ich ganz genau so. Hatte ich weiter oben ja bereits erwähnt.

Bei visuellem Überblick, ist eine gute Lesbarkeit (Erkennung) von Vorteil.

Da hast du völlig recht. Die Zahl muss jedoch nicht optisch gut differenzierbar sein - siehe unten.

Du sprichst von temporären Dateien, was hast Du damit letztendlich vor? Sollen diese dauerhaft gespeichert werden, oder sind diese nur kurzfristig von Bedeutung?

Bei Probeläufen von Versuchsaufbauten sollen versch. Parameter gesammelt/dokumentiert und verglichen werden. Da die Probeläufe manchmal längere Laufzeiten haben, halte ich das Erstellen von Log-Dateien für sinnvoll. Die Logs müssen allerdings nicht alle und auch nicht ewig aufbewahrt werden. Sie müssen aber eindeutig bzgl. ihres zeitlichen Verlaufs einzuordnen sein. Auch die Zeitstempel innerhalb der Logs müssen eindeutig und vor allem gut durchsuchbar sein. Das Format YYYYMMTTHHMMSS leistet das vor allem deshalb, weil es eine Zahl ist, die sich nur in den jeweils letzten Stellen ändert (also von "hinten"), somit eindeutig ist und ausschließlich hochzählt. Bei diesem Zahlenformat wird es niemals zu einer Mehrdeutigkeit kommen und nur darauf kommt es an.
Würde ich das Format mit Trennern optisch "aufhübsche", müsste ich diese Trenner für Suchläufe nur (mit Mehraufwand) wieder wegparsen müssen.

Bei langfristiger Speicherung der Dateien in dem Format "zeitstempel=$(date "+%Y%m%d%H%M%S")", ist letztendlich nicht zu erkennen, um was für eine Datei und um welchen Inhalt es sich handelt. Spätestens hier sollte man sich Gedanken um eine entsprechende Lesbarkeit machen, damit das auch langfristig nachvollziehbar ist und bleibt.

Die Lesbarkeit für Menschen, von der du sprichst, spielt in diesem Fall eine untergeordnete Rolle.

Für deine Kommentare danke ich dir.
Sie haben dafür gesorgt, mir noch einmal Gedanken über das Format des Zeitstempels zu machen.

Viele Grüße,
Alexander

Nobuddy

Avatar von Nobuddy

Anmeldungsdatum:
2. September 2005

Beiträge: 6990

Wohnort: 29614 Soltau

Danke, wünsche Dir alles Gute für Dein Projekt! 😉

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Wohnort: Berlin

Purpur schrieb:

Auch die Zeitstempel innerhalb der Logs müssen eindeutig und vor allem gut durchsuchbar sein. Das Format YYYYMMTTHHMMSS leistet das vor allem deshalb, weil es eine Zahl ist, die sich nur in den jeweils letzten Stellen ändert (also von "hinten"), somit eindeutig ist und ausschließlich hochzählt. Bei diesem Zahlenformat wird es niemals zu einer Mehrdeutigkeit kommen und nur darauf kommt es an.
Würde ich das Format mit Trennern optisch "aufhübsche", müsste ich diese Trenner für Suchläufe nur (mit Mehraufwand) wieder wegparsen müssen.

Nein. Abgesehen von den Trennern handelt es sich bei allen Zeichen um Zahlen. Zahlen sind im Asciicode aber aufsteigend von der 0 codiert, so dass eine alphabetische Sortierung einer numerischen entspricht.

Die Trennzeichen sind konstant und in jedem Zeitstempel an den gleichen Stellen, sind also für alle Vergleiche neutrale Elemente, da muss nichts weggeparst werden.

Antworten |