将FILETIME转换为便携式时间单位
Convert FILETIME to portable time unit
如何将Windows FILETIME对象转换为time_t
或原始秒/毫秒?我正在将一些代码从Windows移植到Unix,所以我不能依赖Windows API函数。
FILETIME
定义为
任何工具/网站都会告诉你,这两个纪元相隔134774天(或11644473600秒)。因此:包含一个64位值,表示从1601年1月1日(UTC)开始的100纳秒间隔数。
void convert_filetime(struct timeval *out_tv, const FILETIME *filetime)
{
// Microseconds between 1601-01-01 00:00:00 UTC and 1970-01-01 00:00:00 UTC
static const uint64_t EPOCH_DIFFERENCE_MICROS = 11644473600000000ull;
// First convert 100-ns intervals to microseconds, then adjust for the
// epoch difference
uint64_t total_us = (((uint64_t)filetime->dwHighDateTime << 32) | (uint64_t)filetime->dwLowDateTime) / 10;
total_us -= EPOCH_DIFFERENCE_MICROS;
// Convert to (seconds, microseconds)
out_tv->tv_sec = (time_t)(total_us / 1000000);
out_tv->tv_usec = (useconds_t)(total_us % 1000000);
}
相关文章:
- 以天C++为单位的两个时间戳之间的差异
- 如何以毫秒为单位获取开始时间和 now() 之间的毫秒差异(以 C++为单位?
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- 测量精确的时间,单位为纳秒C++
- 如何在python和C++中以毫秒为单位打印相同的时间
- C++ 旧时间到现在的时间(以小时为单位)
- 如何找到纪元时间戳和 std::chrono::system_clock::now 之间的时差(以毫秒为单位)
- 仅使用C++中的标准库获取以毫秒为单位的当前日期和时间
- 以秒为单位将时间从纪元转换为一年中的某一天?
- 如何使用闰秒以微秒为单位获取 UTC 时间
- 测量 std::系统的实际执行时间(以 C++ 为单位)
- 优先级队列的时间复杂度(以C++为单位)
- C++以微秒为单位解析日期/时间
- 以C++为单位的聚合代码块的墙时间
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- 如何在跨平台C++中以毫秒为单位获得系统启动/启动时间(它应该在Windows / IOS / Android / MA
- 以 ns3 为单位计算数据包接收时间
- 使用时间单位的模板返回计时::d的函数
- 将FILETIME转换为便携式时间单位
- c++ 计时的默认时间单位是什么?