c++ - 如何使用闰秒以微秒为单位获取 UTC 时间
问题描述
如何在调整闰秒的情况下以微秒为单位获得 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 没有调整闰秒。但是,当我使用 C 时,gmtime()
我会得到不同的结果:
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
如何使用 boost 库来实现它?
解决方案
使用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';
}
这是对 的C++20 新增<chrono>
功能的预览,但在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
推荐阅读
- c# - 使用 Roslyn 确定 BinaryExpression 是否为算术表达式
- android - 无法通过按 Android 设备的后退键按钮关闭 Admob 插页式广告
- android - 间歇性 SSLHandshakeException 使用 OKHttp 调用 GET
- html - 为什么我的 ::before 样式显示在 ::after 位置?
- cross-domain - 跨域跟踪,我的 google 跟踪代码管理器 [装饰表单 = True] 它不起作用
- arrays - DataFrame 列(数组类型)包含 Null 值和空数组(len =0)。如何将 Null 转换为空数组?
- lua - Lua - 接受多个输入
- android - 根据其他视图的属性启用视图 - android数据绑定
- python - Python统一随机数生成为三角形
- visual-studio-code - C/C++ 代码导航在 vscode 远程开发中不起作用