jak zamienic std::filesystem::last_write_time na string ?

0

AI podpowiada mi rozwiazanie

#include <chrono>
#include <filesystem>
#include <string>

template <typename TP>
std::string fileTimeToString(TP file_time) {
    using namespace std::chrono;
    auto system_time = clock_cast<system_clock>(file_time);
    auto time = system_clock::to_time_t(system_time);
    return std::to_string(time);
}

ale to wymaga c++20

potem AI zaproponowało

#include <chrono>
#include <filesystem>
#include <string>

template <typename TP>
std::string fileTimeToString(TP file_time) {
    using namespace std::chrono;
    auto sctp = time_point_cast<system_clock::duration>(file_time - TP::clock::now() + system_clock::now());
    auto time = system_clock::to_time_t(sctp);
    return std::to_string(time);
}

ale podczas testowania wyszło że jeden plik raz miał wartość 1703193810 a za drugim razem 1703193811, nie wiem czemu

1

Możesz następnym razem dawać MCVE i bardziej szczegółowy opis problemu. Miałem problem w zrozumieniu w czym właściwie tkwi problem.
dopiero jak sam zacząłem eksperymentować problem stał się jasny.
Znalazłem właściwe rozwiązanie dla C++17: Okazuje się, że to jest API C++20, zaufałem za bardzo odpowiedzi na SO: https://stackoverflow.com/a/76582834/1387438

template <typename TP>
const std::tm* fileTimeToTm(TP file_time) {
    using namespace std::chrono;
    auto sctp = TP::clock::to_sys(file_time);
    auto time = system_clock::to_time_t(sctp);
    return gmtime(&time);
}

https://godbolt.org/z/8Krj4v4bW

Problem czemu obserwujesz ten problem jest w detalu wyjaśniony w tej drugie odpowiedzi, gdzie ten hack jest testowany. https://stackoverflow.com/a/35293183/1387438

0

@MarekR22: Dziękuje za dogłębne zbadanie tematu !

1 użytkowników online, w tym zalogowanych: 0, gości: 1