Tuesday, February 10, 2009

UNIX время 1234567890

Пользователи UNIX-подобных операционных систем по всему готовятсяотметить символичную дату. 13 февраля 2009 года в 23:31:30 по Гринвичу UNIX-время во всех системах, работающих в данном стандарте, достигнетотметки 1 234 567 890 секунд. Помимо того, что на серверах выстраиваетсятакая комбинация цифр, так эта дата еще и приходится на пятницу 13-е,говорят многие суеверные администраторы.

Unix-время представляет собой способ кодирования времени, принятый вUNIX и других POSIX-совместимых операционных системах. Моментом началаотсчёта считается полночь (по UTC) с 31 декабря 1969 года на 1 января1970, время с этого момента называют <<эрой UNIX>>.

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

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

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

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

No comments: