我刚接触<time.h>
,对time_t
和time()
有疑问。
我读的函数time()记录如下:
time_t time(time_t * timer);获取当前时间
将当前日历时间作为time_t对象获取。
该函数返回此值,如果参数不是null 指针,该值也设置为计时器指向的对象。
文档没有谈及时区。
因此,对于以下C ++代码:
time_t t =时间(NULL);
如果两台机器,一台在美国,另一台在英国,同时执行函数调用time(NULL)
,返回的time_t对象是否相同?
无论时区如何,time()都会返回一个值吗?
答案 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的第二个计数。
答案 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.
结果:
答案 5 :(得分:0)
这将为您提供“本地时代”:
time_t t = time(NULL);
t = timegm(localtime(&t);