2011|08|
2013|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|05|06|07|08|09|10|11|12|
2016|01|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|

2019-01-20 C言語のtime_tではなく、std::chrono::system_clock::time_point を使わなければならなくなった [長年日記]

/*
  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;
 
}
syntax2html