首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是使用struct 'tm_isdst‘标志的正确方式吗?

这是使用struct 'tm_isdst‘标志的正确方式吗?
EN

Stack Overflow用户
提问于 2017-09-16 22:18:30
回答 1查看 1.5K关注 0票数 0

我正在用C++构建一个应用程序,在这个应用程序中,我需要时间对象来提供对当前系统时间的访问。为此,我使用time.h。我的两个构造器如下:

代码语言:javascript
复制
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的正确方式吗?如果不是,应该如何使用它(例如,在这样的构造函数中)来在不同的系统中正常工作?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-16 22:47:34

您的代码应该是简单的:

代码语言:javascript
复制
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;
}

找出“现在”是什么时候并不要求你告诉机器DST是开着还是关着。它已经知道了。

P.S.:您的代码是线程--毫无原因地不安全--使用localtime_r()来修复这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46258930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档