Forum: Projekte & Code Jidai - compilation time stamps


von Vincent H. (vinci)


Lesenswert?

Grüß euch

Jidai ist eine Mini-Lib (single header) die aus den Präprozessor Defines 
DATE und TIME (inkl. double underscores) einen sinnvollen Zeitstempel 
der Compile Zeit bestehend aus Datum und Uhrzeit erzeugt.

Im wesentlichen beschränkt sich das ganze auf 2 Optionen:

1.) Die Erzeugung folgenden structs
1
struct CompilationTime {
2
  uint8_t day;
3
  uint8_t month;
4
  uint16_t year;
5
  uint8_t hour;
6
  uint8_t minute;
7
  uint8_t second;
8
};

durch die Funktion
1
constexpr CompilationTime make_compilation_time();


2.) Die Erzeugung eines unix time stamps zu einer gewissen Epoch.

Der Rückgabewert ist in diesem Fall ein Template, sollte man ein 
spezielles Format brauchen. (z.B. lediglich 4-byte signed, wie es recht 
häufig zu sehen ist)
1
template<typename T = time_t>
2
constexpr T make_unix_compilation_time(CompilationTime const epoch = default_epoch);

default_epoch entspricht der klassischen Unix Epoch 1.1.1970.
1
inline constexpr CompilationTime default_epoch{.day = 1, .month = 1, .year = 1970};

Interessante Randnotiz: Sowohl unter GCC als auch unter Clang beginnt 
die Unix Epoche erst um 1 Uhr und nicht mit Mitternacht... ;)


Header inkl. Test gibts hier:
https://gitlab.com/higaski/Jidai

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

und was spricht gegen die Verwendung von "__DATE__" und "__TIME__" ?

W.S.

von ui (Gast)


Lesenswert?

W.S. schrieb:
> und was spricht gegen die Verwendung von "__DATE__" und "__TIME__"
> ?
>
> W.S.

Schau doch mal rein in die header Datei. Das ist einfach nur ein Wrapper 
für _DATE__ und __TIME_ :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

W.S. schrieb:
> und was spricht gegen die Verwendung von "__DATE__" und "__TIME__" ?

Die liefern einfache Strings, nicht aber eine befüllte Struktur, aus der 
man die einzelnen Werte herauspicken kann.

"jidai" ist ein Parser für diese Strings.

von Wilhelm M. (wimalopaan)


Lesenswert?

Schau ja fast so aus, als hättest Du meinen Idee / meinen Code 
aufgegriffen:

Beitrag "Re: avr-gcc: _DATE_ formatieren / "initializer element is not constant""

von Vincent H. (vinci)


Lesenswert?

Hab für ein Projekt in der Arbeit einen Unix Timestamp benötigt. Zuerst 
hoffte ich drauf dass <chrono> da was passendes hat... aber da gibts 
leider nix constexpr taugliches.

Nach "constexpr compile time" oder ähnlichem googlen war dann auch nicht 
wirklich erfolgreich. :)

von Wilhelm M. (wimalopaan)


Lesenswert?

Vincent H. schrieb:
> Hab für ein Projekt in der Arbeit einen Unix Timestamp benötigt. Zuerst
> hoffte ich drauf dass <chrono> da was passendes hat... aber da gibts
> leider nix constexpr taugliches.

Schau mal nach Howard Hinnants "Date"-Bibliothek, die Vorlage für 
C++20-Date.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.