Почему tm_sec варьируется от 0-60 вместо 0-59 во времени. H?
My time.h
имеет следующее определение tm
:
struct tm {
int tm_sec; /* seconds after the minute [0-60] */
int tm_min; /* minutes after the hour [0-59] */
int tm_hour; /* hours since midnight [0-23] */
...
}
Я только заметил, что они документируют tm_sec
как диапазон между 0-60 включительно. Я всегда считал, что он варьируется от 0-59, как tm_min
. Я, конечно, никогда не видел, чтобы часы читали 10:37:60...
Считаете ли вы, что это всего лишь ошибка, связанная с документацией, полученной из этого 90-летнего архива Berkley?
Или есть что-то более тонкое, о котором я не знаю?
Ответы
Ответ 1
Leap seconds являются причиной этого:
Вторая секунда - это корректировка плюс или минус одна секунда в шкале времени скоординированного универсального времени (UTC), которая удерживает ее близко к среднему солнечному времени.
Когда положительная секундная скачка добавляется в 23:59:60 UTC, она задерживает начало следующего дня UTC (в 00:00:00 UTC) на одну секунду, эффективно замедляя часы UTC.
Ответ 2
Страница руководства для ctime
объясняет, что это примерно в секундах:
tm_sec
: количество секунд после минуты, обычно в диапазоне от 0 до 59, но может быть до 60, чтобы разрешить прыжок секунд.