我正在编写一个对当地时间非常敏感的软件。我正在使用boost :: posix_time来获取计算机的本地时间。但是,我注意到如果我们在执行期间更改时间和时区,则当地时间完全错误。这是我写的一个小测试程序:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <stdio.h>
int main(int argc, char* argv[])
{
while(1)
{
std::cout << "It's : " << boost::posix_time::to_simple_string(
boost::posix_time::second_clock::local_time()) << std::endl;
sleep(1);
}
return 0;
}
然后我启动应用程序,时间是正确的:
./testDate
It's : 2013-Apr-22 10:35:22
然后我在执行期间改变时间和时区,时间完全错了!
rm /etc/localtime ; ln -s /usr/share/zoneinfo/Europe/Belfast /etc/localtime ; date -s 10:35:00
It's : 2013-Apr-22 10:35:16
It's : 2013-Apr-22 10:35:17 <-- Time changed here
It's : 2013-Apr-22 04:35:00
It's : 2013-Apr-22 04:35:01
但如果我手动重启应用程序,时间再次正确!我想知道是否有办法告诉提升从系统时钟刷新日期时间?我想它在启动时读取一次并将时间存储在内存中。我怎么能检测到时区或时间已经改变,我必须告诉提升更新时间?通过定期询问时间,检查时间是否与我上次抽出时间有显着差异?
答案 0 :(得分:0)
我怀疑这个功能是故意被排除在提升之外的,因为它需要针对这种特定于应用程序的添加造成不必要的性能损失(或者更糟糕的是,可能会因为很少需要的功能而混乱api)。我同意其他人的观点,即应该在用户应用程序中检测时间变化。