Почему tm_sec колеблется от 0-60 вместо 0-59 по времени.h? - PullRequest
25 голосов
/ 19 апреля 2009

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-х годах?

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

Ответы [ 2 ]

36 голосов
/ 19 апреля 2009

Причиной этого являются високосные секунды :

Дополнительная секунда - это поправка на плюс или минус одна секунда к шкале времени в формате UTC, которая приближает ее к среднему солнечному времени.

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

8 голосов
/ 19 апреля 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...