Подтвердить что ты не робот

Почему 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?

Или есть что-то более тонкое, о котором я не знаю?

4b9b3361

Ответ 1

Leap seconds являются причиной этого:

Вторая секунда - это корректировка плюс или минус одна секунда в шкале времени скоординированного универсального времени (UTC), которая удерживает ее близко к среднему солнечному времени.

Когда положительная секундная скачка добавляется в 23:59:60 UTC, она задерживает начало следующего дня UTC (в 00:00:00 UTC) на одну секунду, эффективно замедляя часы UTC.

Ответ 2

Страница руководства для ctime объясняет, что это примерно в секундах:

tm_sec: количество секунд после минуты, обычно в диапазоне от 0 до            59, но может быть до 60, чтобы разрешить прыжок секунд.