Gets an instance of the current system local time accurate to milliseconds

  • 2020-06-01 10:25:04
  • OfStack

Examples are as follows:


#include <sys/timeb.h>
#include <chrono>

char* cur_time_c(char strDateTime[32])
{
 struct timeb tp_cur;
 ftime(&tp_cur);

 struct tm btm;

#ifdef WIN32
 localtime_s(&btm, &tp_cur.time);
#else
 localtime_r(&tp_cur.time, &btm);
#endif

 sprintf(strDateTime, "%04d-%02d-%02d %02d:%02d:%02d.%03d", 
  btm.tm_year + 1900, btm.tm_mon + 1, btm.tm_mday,
  btm.tm_hour, btm.tm_min, btm.tm_sec, tp_cur.millitm);

 return strDateTime;
}


char* cur_time_cpp11(char strDateTime[32])
{
 static const std::chrono::hours = EIGHT_HOURS(8);

 auto nowLocalTimeCount 
  = std::chrono::system_clock::now().time_since_epoch()
  + EIGHT_HOURS;

 std::chrono::hours now_h
  = std::chrono::duration_cast<std::chrono::hours>(nowLocalTimeCount);
 std::chrono::minutes now_m
  = std::chrono::duration_cast<std::chrono::minutes>(nowLocalTimeCount);
 std::chrono::seconds now_s
  = std::chrono::duration_cast<std::chrono::seconds>(nowLocalTimeCount);
 std::chrono::milliseconds now_ms
  = std::chrono::duration_cast<std::chrono::milliseconds>(nowLocalTimeCount);

 sprintf(strDateTime, "%02d:%02d:%02d.%03d", 
  now_h % 24, now_m % 60, now_s % 60, now_ms % 1000);

 return strDateTime;
}

Related articles: