【问题标题】:Cross Platform way to get the time of day?跨平台获取时间的方式?
【发布时间】:2012-06-19 04:58:03
【问题描述】:

是否有一种简单的方法可以在 iOS、OSX、Linux 和 Windows 上获取一天中的时间(17:30、01:20...等)?

如果没有,是否有 Windows 方式和 posix 方式之类的?

谢谢

【问题讨论】:

  • 你可以试试this answer,POSIX有gettimeofday
  • 如果你必须跨越一个平台只是为了获得好时间,那就太愚蠢了。

标签: c++ c cross-platform


【解决方案1】:

您可以使用time_t now = time(NULL);time(&now); 检索时间

然后您通常使用struct tm *tm_now = localtime(&now); 转换为当地时间。 struct tm 包含年、月、日、星期几、小时、分钟和秒的字段。如果你想产生可打印的输出,strftime 直接支持。

这两者都在 C 和 C++ 标准中,因此它们在大多数普通平台上都可用。

如果你真的只关心 C++,你可以使用std::put_time,它类似于strftime,但对于将输出写入流的典型情况使用起来要简单一些。

【讨论】:

    【解决方案2】:

    你可以使用 C++11

    #include <iostream>
    #include <iomanip>
    #include <ctime>
    
    int main()
    {
        std::time_t t = std::time(nullptr);
        std::cout << "UTC:   " << std::put_time(std::gmtime(&t), "%c %Z") << '\n'
                  << "local: " << std::put_time(std::localtime(&t), "%c %Z") << '\n';
    }
    

    应该在(任何平台)上产生

    UTC:格林威治标准时间 2011 年 12 月 28 日星期三 11:47:03

    本地:2011 年 12 月 28 日星期三 06:47:03 EST

    虽然std::put_time()(来自iomanip)还没有在gcc 4.7.0中实现。

    【讨论】:

    • 它是在 GCC 5.0 中添加的
    猜你喜欢
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2011-07-31
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多