这是使用 struct tm 'tm_isdst' 标志的正确方法吗

Is this a correct way to use the struct tm 'tm_isdst' flag

我正在用 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 标志外,一切都非常简单,因为当时间改变时单元测试失败,但对我来说仍然是神秘的。我在 Internet 上找不到关于如何正确使用此标志的明确文档,而且我听说在某些系统上,它甚至不可用(即设置为 0)。

这是使用 tm_isdst 的正确方法吗?如果不是,应该如何使用它(例如在这样的构造函数中)以在不同系统中正常工作?

澄清: 目前,我对 time.h 的任何替代方案不感兴趣。

您的代码应该很简单:

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;
}

查明现在几点"now"不需要您告诉机器夏令时是开还是关。它已经知道了。

P.S.: 你的代码无缘无故是线程不安全的——使用 localtime_r() 来解决这个问题。