【问题标题】:What does time_t mean?time_t 是什么意思?
【发布时间】:2011-12-22 06:31:21
【问题描述】:

根据http://www.cplusplus.com/reference/clibrary/ctime/time_t/ time_t 是自 1970 年 1 月 1 日午夜 UTC 以来的秒数。因此,如果我按照此处记录的http://www.cplusplus.com/reference/clibrary/ctime/time/ 调用时间函数,返回的秒数是从纪元到现在的 UTC,还是按照它运行的主机的标准时区调整的时间?

而且,更重要的是,为什么没有记录?

【问题讨论】:

  • 将所有时间存储为 UTC 将节省大量精力。仅在您想显示时转换为本地时间。
  • 在 windows 下运行以下程序: // timetest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { time_t now;现在的时间); printf("自纪元 %ld 以来的秒数", now);立即返回;并且它返回了一个我的时区设置为东部的时间。然后我关闭了 Visual C++,将我的时区更改为太平洋,重新启动 C++ 并重新运行程序,它比以前多返回 50 秒,大约需要多长时间才能运行该程序。所以windows下的VC++库似乎返回UTC。
  • 当然,洛基。是什么让你相信我没有这样做?
  • @Thom:在我看来记录在案msdn.microsoft.com/en-us/library/1f4c8f33(v=VS.100).aspx。 www.cplusplus.com 留下了很多信息,其中一些是完全错误的。 (尤其是现在 C++11 出来了)
  • 澄清一下:C 和 C++ 标准都没有定义分辨率或时代,但 POSIX 有。

标签: c++ visual-c++


【解决方案1】:

世界标准时间。 localtime() 和好友映射到 当地时区。

【讨论】:

  • 在windows下看我上面关于time()的注释。
【解决方案2】:

time_t 是根据标准定义的实现,在 VC++ 中它只是 typedef__int64。该值从time() 返回:实现对当前日历时间的最佳近似。如果日历时间不是,则返回值 (time_t)(-1) 可用。

【讨论】:

    【解决方案3】:

    它包含自纪元以来的时间,根据当地时区进行调整

    time_t time(time_t *tloc) -- returns the time since 00:00:00 GMT, Jan. 1, 1970, measured in seconds. 
    

    [无效]

    该结构包含自纪元以来的时间(以秒为单位)、最多 1000 毫秒的更精确间隔、本地时区(以格林威治向西的时间分钟数衡量)和一个标志,如果非零,则表示夏令时在当地一年中的适当部分适用。

    [/invalid]

    【讨论】:

    • 我不知道你的机器@KevinDTimm,但在我的机器上它是__int64 的typedef。
    • 废话,对不起,我的答案包含来自两个不同功能的信息,正在插入修复......
    • 你把它和struct tm混淆了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    • 1970-01-01
    • 2013-03-09
    • 2020-05-01
    相关资源
    最近更新 更多