我正在用C ++构建一个应用程序,我需要Time对象来访问当前系统时间。为此,我使用time.h
。我的两个构造函数如下:
Time::Time(bool p_daylightSavingEnabled /* = true */)
{
time_t rawTime = time(nullptr);
struct tm* timeInfo = localtime(&rawTime);
timeInfo->tm_isdst = static_cast<int>(p_daylightSavingEnabled);
m_hours = timeInfo->tm_hour;
m_minutes = timeInfo->tm_min;
m_seconds = timeInfo->tm_sec;
}
除了使用我添加的tm_isdst
标志之外,一切都非常简单,因为当小时改变时单元测试失败,但对我来说仍然是神秘的。我没有找到关于如何在互联网上正确使用这个标志的明确文件,我听说在某些系统上,它甚至不可用(即设置为0)。
这是使用tm_isdst
的正确方法吗?如果不是,它应该如何在不同的系统中正常使用(例如在这样的构造函数中)?
澄清:目前,我对time.h
的任何替代品都不感兴趣。
答案 0 :(得分:0)
您的代码应该简单:
Time::Time()
{
time_t rawTime = time(nullptr);
struct tm* timeInfo = localtime(&rawTime);
m_hours = timeInfo->tm_hour;
m_minutes = timeInfo->tm_min;
m_seconds = timeInfo->tm_sec;
}
找出现在的时间&#34;现在&#34;不要求您告诉机器DST是打开还是关闭。它已经知道了。
P.S。:您的代码无缘无故地使用线程 - 请使用localtime_r()
来解决此问题。