time_t是否按时间()区域返回?

时间:2011-09-15 06:13:14

标签: c++ c time timezone

我刚接触<time.h>,对time_ttime()有疑问。

我读的函数time()记录如下:

  

time_t time(time_t * timer);获取当前时间

     

将当前日历时间作为time_t对象获取。

     

该函数返回此值,如果参数不是null   指针,该值也设置为计时器指向的对象。

文档没有谈及时区。

因此,对于以下C ++代码:

  

time_t t =时间(NULL);

如果两台机器,一台在美国,另一台在英国,同时执行函数调用time(NULL),返回的time_t对象是否相同?

无论时区如何,time()都会返回一个值吗?

6 个答案:

答案 0 :(得分:8)

不,它不是特定于区域的。它返回的值是UTC自1970年1月1日以来的秒数,忽略闰秒。所以(原则上)如果两台机器在同一时间执行调用,则返回的值将是相同的,即使它们在两个不同的时区中工作。

答案 1 :(得分:3)

嗯,有记录表示返回time_t - documented,其中包含:{/ p>

  

几乎普遍预期它是一个整数值,表示从UTC时间1970年1月1日00:00开始经过的秒数。这是由于历史原因,因为它对应于unix时间戳,但是在所有平台的C库中广泛实现。

严格来说,它的外观不能保证跨平台,但在实践中可以以跨平台的方式处理,并且是UTC。

(当然,time_t会有多个文档来源开始......我不确定这里究竟有什么可以被认为是确定的。)

答案 2 :(得分:2)

time_t值与时区差异无关,因为它们会计算epoch的时间。如果您希望拥有本地日历时间,则可以获取time_t值并将其传递给localtime()函数,该函数会返回指向您当地时间的struct tm指针。

答案 3 :(得分:1)

没有;此函数返回1970年1月1日00:00:00 UTC的第二个计数。

Wikipedia

答案 4 :(得分:1)

根据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相比,本地 时间,即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.

结果:

  1. 来自C库的 time()返回的time_t值必须不是特定于时区的。如果不是这样,则C库实现不符合标准,这种情况可以视为库中的错误。
  2. time_t值编码未指定!它可以在POSIX标准中指定,但绝对不在C标准中指定。因此,您不得依赖关于其实现细节的假设,例如它在一秒分辨率中计算时间,或者它是包含自UTC时间1970年1月1日00:00后经过的秒数的整数。使用C标准库中的相应函数(例如 gmtime() localtime())将time_t转换为struct tm并访问时间戳详细信息。至少如果您的应用程序不被视为仅限于* NIX系统。

答案 5 :(得分:0)

这将为您提供“本地时代”:

time_t t = time(NULL);      
t = timegm(localtime(&t);