如何在Win32 C中将GMT转换为LocalTime?

时间:2020-03-05 18:54:24  来源:igfitidea点击:

我想将历史记录中的各种位置/日期/时间从格林尼治标准时间转换为本地时间。看来" SystemTimeToTzSpecificLocalTime"要比" FileTimeToLocalFileTime"更好。当日期/时间对也包括不同的位置时,转换变得很麻烦。我在ftp://ftp.iana.org/tz/releases找到了一个数据集,该数据集是ftp://elsie.nci.nih.gov/pub/?从历史和空间来看,这似乎已经很完善了,但是似乎被设计为针对一个时区而不是所有时区进行编译。

" GetDynamicTimeZoneInformation"和" GetTimeZoneInformationForYear"功能仅在Vista / Server 2008或者更高版本中可用,并且我的计算机可以恢复到NT 4.0。我可能会尝试在较新的系统上有条件地使用它们。

是否有一个不错的C软件包可以为我解决Windows XP和NT 4.0的问题?

解决方案

回答

SystemTimeToTzSpecificLocalTime是适合此功能的函数,但是我们需要一种方法来填充TIMEZONE_INFO结构的完整数据库。

有关如何从注册表本身构建一组TIMEZONE_INFO结构的详细信息,请参见egghead cafe上的以下线程:
http://www.eggheadcafe.com/software/aspnet/31656478/get-current-time-in-diffe.aspx

为了使立法变更真正正确,我们需要GetDynamicTimeZoneInformation和GetTimeZoneInformationForYear。请参阅http://msdn.microsoft.com/zh-cn/library/ms724421(VS.85).aspx。