time_t由time()返回,特定于时区
Is time_t returned by time() zone specific?
我刚接触<time.h>
,对time_t
和time()
有一个问题。
我读取函数time()文档如下:
time_t time (time_t * timer);获取当前时间
获取当前日历时间作为time_t对象。
函数返回这个值,如果参数不为空指针,该值也设置为定时器所指向的对象。
文档没有讨论时区。
因此,对于下面的c++代码:
time_t = time(NULL);
如果两台机器,一台在美国,另一台在英国,同时执行函数调用time(NULL)
,返回的time_t对象是否相同?
time()会返回一个值而不管时区吗?
不,它不是特定于区域的。它返回一个值,该值是自UTC时间1970年1月1日以来的秒数,忽略闰秒。所以(原则上)如果两台机器在完全相同的时间执行调用,返回的值将是相同的,即使它们在两个不同的时区工作。
好吧,它的文档返回一个time_t
-它的文档是:
它几乎被普遍认为是一个整数值,表示从UTC时间1970年1月1日00:00开始经过的秒数。这是由于历史原因,因为它对应于unix时间戳,但在所有平台的C库中广泛实现。
所以严格来说,从它的外观上看,它不能保证是跨平台的,但在实践中可以被以跨平台的方式对待,并且是在UTC中。
(当然,time_t
将有多个文档来源开始…
time_t
值与时区差异无关,因为它们从epoch计算时间。如果您想要一个本地日历时间,您可以获取time_t
值并将其传递给localtime()
函数,该函数将返回一个指向struct tm
的指针,其中包含您的本地时间。
不;此函数返回UTC时间1970年1月1日00:00:00开始的第二个计数。
维基百科根据2011年发布的C语言最新标准:
1. The *time* function determines the current **calendar time**.
2. The encoding of the value is unspecified.
3. The *time* function returns the implementation’s best approximation
to the current calendar time.
其中日历时间按标准represents the current
date (according to the Gregorian calendar) and time
计算,而按本地计算time,即the calendar time expressed for some specific time zone
。The range and precision of times representable in clock_t and time_t are implementation-defined.
结果:
- time()从C库返回的
- time_t值必须不是特定于时区的。如果不是,则说明C库的实现不符合标准,这种情况可以认为是库中的bug。
- time_t值编码未指定!它可以在POSIX标准中指定,但绝对不能在C标准中指定。因此,你不能依赖于它的实现细节的假设,比如它以一秒的分辨率计算时间,或者它是一个整数,包含从1970年1月1日00:00 UTC开始经过的秒数。使用C标准库中的适当函数,例如gmtime()和localtime(),将time_t转换为struct tm并访问时间戳细节。至少如果您的应用程序不被认为只受*NIX系统的限制。
这将给你一个"本地纪元":
time_t t = time(NULL);
t = timegm(localtime(&t);
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- c++r值引用应用于函数指针
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 如何仅使用对象名称打印特定于对象的成员
- 相当于LocaleMatcher的ICU4C
- 等<thing>效于char32_t
- 类似于strcat()的函数出现问题
- Log4cpp:以UTC/GMT时区打印日期
- 如何将C++闭包与变量参数同时重用——类似于JavaScript
- 算术运算的结果类似于:C浮点变量中的1/3
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- std::strftime 在 Windows 中使用 GMTIME 将时区 UTC 显示为 UTC+1
- 相当于 pybind11 中的 boost::p ython py::scope().attr()
- 如何将记忆应用于此递归函数?
- 对对应于矩阵的行和列的对向量进行排序
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- Cython 相当于 "using Time = cppClassDefinition<withT>"
- C++相当于 Linux 中 Python 的 time.time() 吗?
- time_t由time()返回,特定于时区
- 使用自定义时区将 boost::p osix_time::p time 转换为字符串