这是使用 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()
来解决这个问题。
我正在用 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()
来解决这个问题。