/* g++ -g time_point2.cpp -o time_point2 g++ -g time_point2.cpp -o time_point2 -I"D:\PostgreSQL\10\include" -L"D:\PostgreSQL\10\lib" -llibpq -lwsock32 -lws2_32 */ /* C言語のtime_tではなく、std::chrono::system_clock::time_point を使わなければならなくなり、 色々調べて、(エライ時間がかかったが)ようやくここに辿りついた ・・・そんなに便利かなあ? このライブラリ? (いや、勿論、時間計算が便利なのは分かっているんだけどね) */ #include <iostream> #include <chrono> #include <ctime> #include <time.h> int sub_time_point(std::chrono::system_clock::time_point tp) { // Add 0.123456 seconds // This will not compile if std::chrono::system_clock::time_point has // courser resolution than microseconds //tp += std::chrono::microseconds(123456); // Now output tp // Convert std::chrono::system_clock::time_point to std::time_t std::time_t tt = std::chrono::system_clock::to_time_t(tp); // Convert std::time_t to std::tm (popular extension) std::tm tm = std::tm{0}; //gmtime_r(&tt, &tm); // Error //gmtime_s(&tt, &tm); // Error // tm = *(gtime(&tt)); // グリニッジ時間 tm = *(localtime(&tt)); // ローカル時間 // Output year std::cout << tm.tm_year + 1900 << '-'; // Output month std::cout << tm.tm_mon << '-'; // Output day std::cout << tm.tm_mday << ' '; // Output hour if (tm.tm_hour <= 9) std::cout << '0'; std::cout << tm.tm_hour << ':'; // Output minute if (tm.tm_min <= 9) std::cout << '0'; std::cout << tm.tm_min << ':'; // Output second if (tm.tm_sec <= 9) std::cout << '0'; std::cout << tm.tm_sec << '\n'; return 0; } int main() { // Create 10-10-2012 12:38:40 UTC as a std::tm std::tm tm = {0}; tm.tm_sec = 14; tm.tm_min = 38; tm.tm_hour = 12; tm.tm_mday = 10; tm.tm_mon = 10; tm.tm_year = 112; // + 1900 tm.tm_isdst = -1; // Convert std::tm to std::time_t (popular extension) //std::time_t tt = timegm(&tm); std::time_t tt = mktime(&tm); // Convert std::time_t to std::chrono::system_clock::time_point std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t(tt); sub_time_point(tp); return 0; }