【发布时间】:2021-05-06 10:06:50
【问题描述】:
系统是UTC,有没有办法获取特定时区的本地时间?
大多数 windows api 的返回值基于系统时间。
如果有任何 api 可以传递时区指示并获取本地时间?
另外,阅读不同的api的windows提供,并认为这是一个:“EnumDynamicTimeZoneInformation”
可能对我有用,但我无法让它运行,我看到一个未定义的标识符错误。 错误 C3861:“EnumDynamicTimeZoneInformation”:找不到标识符
在此链接中提到的包含 windows.h: https://docs.microsoft.com/en-us/windows/win32/api/timezoneapi/nf-timezoneapi-enumdynamictimezoneinformation?redirectedfrom=MSDN
在从上述 api 获取信息时,我可以尝试将其传递给:
SystemTimeToTzSpecificLocalTime
并希望这样做。 谁能建议我缺少什么。
在 VS2010 上试试这个
文件:time.cpp
#ifndef WINVER
#define WINVER 0x0602
#endif
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0602
#endif
#include <windows.h>
#include<time.h>
#include<iostream>
int main(){
DYNAMIC_TIME_ZONE_INFORMATION d_tz;
memset(&d_tz,0,sizeof(d_tz));
DWORD res=0;
res = EnumDynamicTimeZoneInformation(1, &d_tz);//fetch specific timezone info
/*Use this next*/
//SystemTimeToTzSpecificLocalTime();
return 0;
}
【问题讨论】:
-
您的目标 Windows 版本是什么?
EnumDynamicTimeZoneInformation仅从 Windows 8 开始支持。 -
Windows server2012。从链接可以看出支持这个版本
-
你能粘贴一些你到目前为止尝试过的代码吗?
-
您是否包含
<timezoneapi.h>标头? -
根据文档,EnumDynamicTimeZoneInformation 从 Windows 8 开始可用。要使其对编译器可见,您必须将最低目标版本设置为
_WIN32_WINNT_WIN8(0x0602) .详情请见Using the Windows Headers。
标签: c++ winapi timezone utc localtime