跨平台获取当前时间的方法?

3

有没有一种简单的方法可以在iOS、OSX、Linux和Windows上获取时间(例如17:30、01:20等)?

如果没有,是否有Windows方式和POSIX方式或其他方式?

谢谢


你可以尝试使用 这个答案,而POSIX有 gettimeofday - jxh
1
如果你必须跨平台才能获取时间,那就太傻了。 - Captain Obvlious
2个回答

9
您可以使用time_t now = time(NULL);time(&now);来获取时间。然后通常使用struct tm *tm_now = localtime(&now);将其转换为本地时间。一个struct tm包含年、月、日、星期几、小时、分钟和秒等字段。 如果您想要生成可打印的输出,则strftime支持直接处理。这两个函数都在C和C++标准中,因此它们在大多数普通平台上都可用。
如果您真的只关心C ++,则可以使用std::put_time,它类似于strftime,但在将输出写入流的典型情况下使用起来更简单。

问题:用户询问当前时间是几点钟。 - Nicholas Jela
@NicholasJela:是的。正如所述,struct tm 包含当前小时、分钟和秒的字段。这不是你所想的时间吗? - Jerry Coffin

5

使用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 GMT

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

虽然 std::put_time()(来自iomanip)尚未在例如GCC 4.7.0中实现。


1
它是在GCC 5.0中添加的。 - TamaMcGlinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接