理想情况下,我希望能够做的是获取时区的名称,并询问Windows的相应时区信息(偏离UTC,DST偏移,DST开关的日期等).看起来Windows使用TIME_ZONE_INFORMATION结构来保存这种信息.因此,据推测,我想要一个函数,它接受带有时区名称的字符串并返回一个TIME_ZONE_INFORMATION结构.
但是,我能找到的所有函数都是GetTimeZoneInformation(),这些函数为我提供了本地时间的TIME_ZONE_INFORMATION.我需要的是一个函数,它将为我提供任意时区的信息,而不管本地时区是什么.
我看到获取该信息的唯一方法是直接从注册表中获取它,这不太理想.该TIME_ZONE_INFORMATION页面显示了它在注册表中,所以它应该可以从那里获取的信息,但我更喜欢一个正确的系统功能做这件事.这样的功能是否存在,或者我是否必须进行注册表潜水才能获得任意时区的时区信息?
我有日期字符串,如2009-02-28 15:40:05 AEDST,并希望将其转换为SYSTEMTIME结构.到目前为止,我有:
SYSTEMTIME st;
FILETIME ft;
SecureZeroMemory(&st, sizeof(st));
sscanf_s(contents, "%u-%u-%u %u:%u:%u",
&st.wYear,
&st.wMonth,
&st.wDay,
&st.wHour,
&st.wMinute,
&st.wSecond);
// Timezone correction
SystemTimeToFileTime(&st, &ft);
LocalFileTimeToFileTime(&ft, &ft);
FileTimeToSystemTime(&ft, &st);
Run Code Online (Sandbox Code Playgroud)
但是我的当地时区不是AEDST.所以我需要能够在转换为UTC时指定时区.