UNIX-время

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

UNIX-время (англ. Unix time) или POSIX-время — система описания моментов во времени, принятая в UNIX и других POSIX-совместимых операционных системах. Определяется как количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг); время с этого момента называют «эрой UNIX» (англ. Unix Epoch).

Время UNIX согласуется с UTC — в частности, при объявлении високосных секунд UTC соответствующие номера секунд повторяются, то есть високосные секунды не учитываются.

Представление времени в виде количества секунд удобно использовать для сравнения и хранения дат (дата и время в этом формате занимают всего 4 или 8 байтов). При необходимости обращения к элементам дат (день, месяц, год) секунды можно преобразовать в любой подходящий формат (и наоборот), но если такие преобразования выполняются часто, они снижают производительность.

В программах для хранения UNIX-времени используется целочисленный знаковый тип. Знаковость упрощает вычисление разницы в секундах между двумя моментами времени, которая может быть отрицательной. 32-битные числа со знаком могут ссылаться на моменты времени от пятницы 13 декабря 1901 года 20:45:52 до вторника 19 января 2038 года 03:14:07 включительно.

Чтобы узнать текущее UNIX-время в большинстве UNIX-подобных систем, можно использовать команду date +%s.

«Юбилейные» значения[править | править вики-текст]

Время Количество секунд
13 декабря 1901 года, 20:45:52 UTC

Минимальная дата в знаковом 32-бит представлении (0x80000000)

19 января 2038 года, 03:14:07 UTC

Максимальная дата в знаковом 32-бит представлении (0x7FFFFFFF)

9 сентября 2001 года, 01:46:40 UTC 1 000 000 000 (1 гигасекунда)
10 января 2004 года, 13:37:04 UTC 1 073 741 824=230 (1 гибисекунда)
18 марта 2005 года, 01:58:31 UTC 1 111 111 111
6 сентября 2008 года 12:12:05 UTС 1 220 703 125 = 513
13 февраля 2009 года, 23:31:30 UTC 1 234 567 890
24 октября 2014 года, 09:03:34 UTC 14 14 14 14 14

Проблема 2038[править | править вики-текст]

19 января 2038 года в 03:14:08 по всемирному времени значение переменной типа time_t, отсчитывающей число секунд, прошедших с 1 января 1970 года, достигнет 231, что может привести к ошибочной интерпретации этого числа как отрицательного. Возможное решение данной проблемы состоит в использовании для хранения времени не 32-битной, а 64-битной переменной (что и делается во всех современных 64-битных операционных системах), этого хватит на 292 млрд лет.

Программная конвертация[править | править вики-текст]

Приводится пример реализации на языке Си функций конвертации между UNIX-временем и обычным представлением в виде даты и времени суток. Пример приведен в стандартном знаковом 32-бит формате. Однако, закомментировав определение _XT_SIGNED, пример соберется в беззнаковом варианте.

См. также[править | править вики-текст]



Ссылки[править | править вики-текст]