Я пробовал примеры в экспертном программировании на C, когда столкнулся с этой проблемой. Моя программа в основном делает одно: используйте стандартную функцию gmtime
и посмотрите, сколько лет прошло с 1970 года. Вот моя программа:
#include <stdio.h>
#include <time.h>
int main(int argc, char** argv) {
time_t now = time(0);
struct tm *t = gmtime(&now);
printf("%d\n", t->tm_year);
return 0;
}
Результатом будет 117, количество прошедших 1900 лет. Это неожиданно, потому что я проверил time()
и man gmtime
заранее, и они оба сказали, что они относятся к времени Эпохи (1970-1-1 00:00:00):
time() returns the time as the number of seconds since the Epoch,
1970-01-01 00:00:00 +0000 (UTC).
The ctime(), gmtime() and localtime() functions all take an argument of data type
time_t, which represents calendar time. When interpreted as an absolute time
value, it represents the number of seconds elapsed since the Epoch, 1970-01-01
00:00:00 +0000 (UTC).
Согласно приведенному выше описанию, моя программа должна была вернуть 47 вместо 117. Что здесь происходит?
macos sierra 10.12.5
Darwin 16.6.0 Darwin Kernel Version 16.6.0: Fri Apr 14 16:21:16 PDT 2017; root:xnu-3789.60.24~6/RELEASE_X86_64 x86_64
Apple LLVM version 8.1.0 (clang-802.0.42)
tm_year The number of years since 1900.
- person Mat   schedule 27.07.2017tm_year
. Он описывает, как интерпретировать значениеtime_t
, которое является аргументом дляgmtime(3)
. - person Ssswift   schedule 27.07.2017