这是使用struct tm'tm_isdst'标志

时间:2017-09-16 22:18:30

标签: c++ ctime time.h

我正在用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的任何替代品都不感兴趣。

1 个答案:

答案 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()来解决此问题。