由于系统/usr/share/zoneinfo
数据库的更新非常频繁,我希望能够在一个运行时间很长的C++程序中动态加载它(并重新加载它)。
现在我知道标准库将使用这个数据库,但我怀疑它是否能提供动态重新加载(或者至少我在谷歌上找不到任何关于它的信息)
有什么C或C++库或代码可以用来做这件事吗?
我是个白痴。提供zoneinfo数据库的IANA也提供了一个使用它的库。有趣的是,我通过阅读postgresql源代码发现了这一点。
我不确定这是否足够,但它是公共领域许可的,所以至少我可以把它拉到我的代码中,并根据我的需求进行调整。
localtime
等使用tzset
设置的时区转换信息,因此通常可以通过将TZ
设置为某个值、调用tzset
、将其设置回并再次调用来重新加载该信息。这将适用于glibc,但您可能应该在其他平台上进行检查。
否则,您将使用其他一些非Posix API来访问zoneinfo数据库,并且您应该查看该库用于重新加载其数据的设施。