如何使用闰秒以微秒为单位获取 UTC 时间

how to get UTC time in micro-seconds with leap seconds

本文关键字:获取 UTC 时间 为单位 何使用      更新时间:2023-10-16

如何在调整闰秒的情况下以微秒为单位获取UTC时间? 我正在使用boost::universal_clock()

boost::posix_time::time_duration utc_time =
boost::posix_time::microsec_clock::universal_time() -
boost::posix_time::from_time_t(0);
int64_t total_microsec = utc_time.total_microseconds(); 

但这样做的结果与

std::chrono::time_point_cast<std::chrono::duration<int64_t, std::microseconds>>(
std::chrono::system_clock::now())
.time_since_epoch()
.count();

这似乎 boost 不是调整闰秒。但是当我使用 Cgmtime()时,我得到不同的结果:

time_t mytime;
struct tm *ptm;
time(&mytime);  // Get local time in time_t
ptm = gmtime(&mytime);  // Find out UTC time
time_t utctime = mktime(ptm);  // Get UTC time as time_t

如何使用提升库来实现它?

使用 Howard Hinnant 的日期/时间库,这非常简单:

#include "date/tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std;
using namespace std::chrono;
auto now = floor<microseconds>(utc_clock::now());
cout << now << 'n';
cout << now.time_since_epoch() << 'n';
cout << clock_cast<system_clock>(now).time_since_epoch() << 'n';
}

这是<chrono>C++20添加的预览,但namespace date

utc_clock计算自 1970-01-01 00:00:00 UTC 以来的时间,包括闰秒。clock_cast将这个时钟的time_point投射回system_clock,只是为了进行比较。

这个程序只是为我输出:

2019-08-10 00:19:04.388788
1565396371388788µs
1565396344388788µs

需要一些安装。