Windows时间戳
时间: 2025-06-05 08:46:35 浏览: 9
### 关于Windows时间戳
Windows时间戳是一种高精度计时方法,通常用于测量短时间段内的性能差异。它通过`QueryPerformanceCounter`函数来获取当前的计时器值,并利用`QueryPerformanceFrequency`函数得到计时器每秒钟的滴答次数[^2]。
#### 获取Windows时间戳的方式
以下是实现Windows时间戳的一个典型C++代码示例:
```cpp
#include <windows.h>
#include <iostream>
int main() {
LARGE_INTEGER frequency;
LARGE_INTEGER start, end;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
// 添加测试任务到这里
for (volatile int i = 0; i < 1000000; ++i); // 模拟一些工作负载
QueryPerformanceCounter(&end);
double elapsedTime = (end.QuadPart - start.QuadPart) * 1000000.0 / frequency.QuadPart; // 计算微秒级耗时
std::cout << "Elapsed time: " << elapsedTime << " us" << std::endl;
return 0;
}
```
此代码片段展示了如何使用`LARGE_INTEGER`结构体以及两个重要的API——`QueryPerformanceFrequency`和`QueryPerformanceCounter`,从而精确地计算某段程序执行所需的时间。
#### Windows时间戳与Unix时间戳之间的转换逻辑
为了将Windows时间戳转化为更常见的Unix时间戳形式(即自1970年1月1日以来经过的秒数),可以采用如下策略:先确定两者零点之间相差的具体秒数值,接着依据这一差额调整所测得的结果[^1]。
具体操作步骤可参见下面Python脚本实例:
```python
import datetime
from ctypes import windll, Structure, c_longlong
class FILETIME(Structure):
_fields_ = [("dwLowDateTime", c_longlong), ("dwHighDateTime", c_longlong)]
def win_to_unix_timestamp(file_time):
EPOCH_AS_FILE_TIME = 116444736000000000 # 差距毫秒数
HUNDREDS_OF_NANOSECONDS = 10000000
ft = FILETIME()
ft.dwLowDateTime = file_time & 0xFFFFFFFF
ft.dwHighDateTime = file_time >> 32
unix_time = (ft.dwHighDateTime << 32 | ft.dwLowDateTime) / HUNDREDS_OF_NANOSECONDS - EPOCH_AS_FILE_TIME
dt = datetime.datetime.utcfromtimestamp(unix_time).strftime('%Y-%m-%d %H:%M:%S')
return dt
file_time_example = 0x01D8B5A4F4EAE000 # 示例文件时间戳
converted_date = win_to_unix_timestamp(file_time_example)
print(f"The converted date is {converted_date}")
```
上述代码实现了从Windows文件时间到标准日期字符串格式的转变过程[^1]。
###
阅读全文
相关推荐















