Aktuelles Jahr mit std::chrono ohne std::localtime()



  • Hallo,
    ich suche gerade eine Möglichkeit, wie man nur mit std::chrono ohne die alten C-Time-Funktionen das Jahr als int bekommt.
    Derzeit sieht der Code so aus:

    	auto time = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
    	int year = std::localtime(&time)->tm_year + 1900;
    

    Hat mir von Anfang an nicht sehr gut gefallen, da ich üblicherweise versuche, die C-Funktionen zu vermeiden, sofern es etwas moderneres gibt. Hat aber zumindest unter Linux mit GCC funktioniert.
    Da das Projekt jedoch plattformunabhängig sein muss, habe ich nun einmal versucht, es unter Windows mit MSVC2017 zu kompilieren, was jedoch zu folgendem Fehler führt:

    Error	C4996	'localtime': This function or variable may be unsafe. Consider using localtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
    

    Meine Probleme dabei: localtime_s ist Microsoft-spezifisch und _CRT_SECURE_NO_WARNINGS ist natürlich eher unschön.
    Gibt es also noch eine schönere Lösung, die ich übersehen habe? Und warum wurde mit std::chrono in C++11 nicht etwas entsprechendes eingeführt?

    Danke!



  • @unterfliege

    Und warum wurde mit std::chrono in C++11 nicht etwas entsprechendes eingeführt?

    Weil man für C++20 auch noch was haben wollte 😃

    Bis es alle Compiler implementieren: https://github.com/HowardHinnant/date



  • Stimmt, kommt tatsächlich mit C++20. 🎉
    Besser spät als nie.

    Danke für den Tipp mit der date-Lib.


Log in to reply