Jak poprawnie formatować i parsować datę ze strefą czasową?

0

https://godbolt.org/z/K57q45Y1v

#include <string>
#include <sstream>          // std::istringstream
#include <iomanip>          // std::get_time
#include <chrono>

#include <fmt/format.h>     // fmt::format
#include <fmt/chrono.h>     // fmt::format


int main()
{
    std::string str = "20010203_040506";
    std::tm timeDate = {};
    std::istringstream ss(str);
    ss >> std::get_time(&timeDate, "%Y%m%d_%H%M%S");    
    auto _time = std::chrono::system_clock::from_time_t(mktime(&timeDate));
    fmt::print("{:%Y-%m-%d %H:%M:%S}\n", std::chrono::floor<std::chrono::seconds>(_time));
}

na moim komputerze jest wynik 2001-02-03 03:05:06 , na godbolt 2001-02-03 04:05:06 jak to poprawić aby u mnie był wynik poprawny czyli taki sam jak godbolt
Gdzie następuje korekta o strefe czasową ?

Jaki w C++ jest najlepszy typ danych do przechowywania DateTime z precyzja 1s ?

2
auto _time = std::chrono::system_clock::from_time_t(timegm(&timeDate));

ale timegm jest z Linux-a, a nie standardu C lub C++ :/.

1

Pewnie zgubiłeś strefę czasową.

0

Niby C++20 ma coś do parsowania czasu https://en.cppreference.com/w/cpp/chrono/parse ale nie widzę wsparcia od kompilatorów.

Compiler support for C++20 - cppreference.com

feature gcc clang msvc apple clang
Calendar and timezone P0355R7 11 (partial)* 13 (partial)* 14 7 (partial) 19.29 (16.10)* 10.0.0* (partial)
0

Też myślę, że godbolt mógł wziąć inna strefę caasowa. Jak on w ogóle działa? Lokalnie w przeglądarce czy gdzieś na serwerze? Jak na serwerze to może bierze tamtejszy GMT

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