gpt4 book ai didi

c++ - 将当前时间从 Windows 转换为 C 或 C++ 中的 unix 时间戳

转载 作者:可可西里 更新时间:2023-11-01 14:42:46 25 4
gpt4 key购买 nike

首先,我知道这个问题被问了很多次(尽管似乎 90% 都是关于转换 Unix ts -> Windows)。其次,我会在另一个已接受的问题中添加评论,而不是添加另一个问题,但我没有足够的声誉。

我在 Convert Windows Filetime to second in Unix/Linux 中看到了公认的解决方案但我坚持我应该传递给函数 WindowsTickToUnixSeconds 的内容。从参数名称 windowsTicks 来看,我试过 GetTickCount但不久之后看到这返回了 ms 自系统启动以来 但我需要自 Windows 时间开始(似乎是在 1601 年?)以来的任何合理计数。

这次我看到windows有一个检索的功能:GetSystemTime .我无法将生成的结构传递给 1 中建议的函数因为它不是一个 long long 值。

有人不能在不遗漏这些令人疯狂的细节的情况下,只给出一个 C 或 C++ 的完整工作示例吗?

最佳答案

对于 Windows 用户:

Int64 GetSystemTimeAsUnixTime()
{
//Get the number of seconds since January 1, 1970 12:00am UTC
//Code released into public domain; no attribution required.

const Int64 UNIX_TIME_START = 0x019DB1DED53E8000; //January 1, 1970 (start of Unix epoch) in "ticks"
const Int64 TICKS_PER_SECOND = 10000000; //a tick is 100ns

FILETIME ft;
GetSystemTimeAsFileTime(out ft); //returns ticks in UTC

//Copy the low and high parts of FILETIME into a LARGE_INTEGER
//This is so we can access the full 64-bits as an Int64 without causing an alignment fault
LARGE_INTEGER li;
li.LowPart = ft.dwLowDateTime;
li.HighPart = ft.dwHighDateTime;

//Convert ticks since 1/1/1970 into seconds
return (li.QuadPart - UNIX_TIME_START) / TICKS_PER_SECOND;
}

该函数的名称与其他 Windows 函数使用的命名方案相匹配。 Windows 系统时间 根据定义 UTC。

<表类="s-表"><头>函数返回类型决议<正文>获取系统时间作为文件时间文件时间结构0.0000001 秒获取系统时间系统时间结构0.001秒获取系统时间作为UnixTimeInt641秒

关于c++ - 将当前时间从 Windows 转换为 C 或 C++ 中的 unix 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20370920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com