Час Unix

Час Unix чи час POSIX — система для опису моментів в часі, а саме кількістю секунд, які минули від початку епохи (півночі за всесвітнім координованим часом в четвер, першого січня, 1970-того року). (Час Unix є означеним і в давніші моменти, але там він є від'ємним). Додаткові секунди, оголошені Міжнародною службою обертання землі та систем відліку, не враховуються, бо не є детермінованими. Широко використовується в Unix-подібних та багатьох інших операційних системах, платформах та файлових форматах. Час Unix на деяких з них можна отримати за допомогою команди date +%s.

Поточний UNIX-час: 1644054620 (09:50, 5 лютого 2022 UTC)
(Вище вказано час останньої генерації цієї сторінки.)
Календарі
Час Unix подолав відмітку 1 млрд секунд о 2001-09-09T01:46:40Z. Це було відсвятковано в Копенгагені на вечірці Данської групи користувачів UNIX о 03:46:40 за локальним часом
Категорія • Портал Список

Цілочисельне представлення

UNIX-час представлено ​​цілим числом, яке збільшується з кожною секундою без необхідності обчислень для визначення року, місяця, дня, години або хвилини для зручності сприйняття людиною. Сучасний UNIX-час узгоджується з UTC — відлік відбувається в секундах SI. Часовий проміжок одного дня майже завжди розбито на 86400 секунд, але при оголошенні високосних секунд становить 86401 секунду. Такі секунди, згідно зі Всесвітнім часом, зберігають тривалість днів, синхронізовану з часом обороту планети. В UNIX-часі відповідні номери секунд повторюються, тобто високосні секунди не враховуються.

У момент часу 00:00:00 UTC + 1 січня 1970 (четвер) UNIX-час дорівнює нулеві. Починаючи з цього часу, число зростає на певну кількість щодня. Таким чином, наприклад, 16 вересня 2004 року в 00:00:00, через 12677 днів після початку відліку UNIX-часу, час буде представлено числом 12677 × 86400 = 1095292800. Розрахунки можна також зробити в зворотному напрямку, використовуючи від'ємні числа. Наприклад, дату 4 жовтня 1957 року 00:00:00, а це 4472 дні до початку відліку, представлено ​​в UNIX-часі числом -4472 × 86400 = -386 380 800.[1]

Кожного дня число, яке представляє Unix-час, обчислюється описаним чином в UTC (00: 00: 00Z) і збільшується рівно на 1 на секунду, починаючи з півночі. Отже, 16-09-2004 17: 55: 43.54, 64543.54 секунд з півночі, з прикладу вище, буде представлено в UNIX-часі числом 1095292800 + 64543.54 = 1095357343.54. Для дат, що передували початку відліку, число також зростає, тобто з плином часу наближається до нуля.

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

У програмах для зберігання UNIX-часу використовується цілочисельний знаковий тип. 32-бітові числа зі знаком можуть посилатися на моменти часу від п'ятниці 13 грудня 1901 року 20:45:52 до вівторка 19 січня 2038 року 3: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 UTC 1 220 703 125 = 513
13 лютого 2009 року, 23:31:30 UTC 1 234 567 890

Проблема Apple iOS як UNIX системи

У 64-бітних iOS пристроїв від Apple існує проблема UNIX системи. Якщо перевести час на пристрої з 64-бітовим процесором під керуванням iOS на годину ночі першого січня 1970 року і перезавантажити пристрій, будучи в часовому поясі від UTC + 1:30 і більше, то після перезавантаження пристрою він не завантажиться, весь час буде світитися «біле яблуко».[джерело?]

Відбувається це через різницю в часових поясах, тобто: якщо перевести час на 1:00 1 січня 1970 року в часовому поясі UTC + 1:30 або більше, то лічильник UNIX-time йде в мінус, так як відлік ведеться від UTC часу, що система зрозуміти не в змозі, внаслідок чого лічильник зависає. Пристрій навіть не відновлюється через DFU, але проблема має три рішення іншими способами. Перший спосіб: просто залишити включеним пристрій і чекати поки лічильник UNIX-time піде в плюс (поки не доведено, що даний спосіб працює). Другий спосіб: чекати поки акумулятор телефону сяде повністю і лічильник сам скинеться на нульовий стан. Третій спосіб: розібрати пристрій і відключити акумулятор на деякий час, потім зібрати пристрій, лічильник так само скинеться на нуль і пристрій буде працювати.

Проблема остаточно вирішена в iOS 9.3.1 — тепер на пристрої доступні для установки дати починаючи з 1 січня 2001 року.[2]

Програмна конвертація

Наводиться[де?] приклад реалізації на мові Сі функцій конвертації між UNIX-часом і звичайним представленням у вигляді дати і часу доби. Приклад наведено в стандартному знаковому 32-біт форматі. Однак, якщо закоментувати визначення _XT_SIGNED, приклад збереться в беззнакову варіанті.

Примітки

  1. General Concepts. pubs.opengroup.org. Процитовано 15 листопада 2016.
  2. Broussard, Mitchel. New Version of 'January 1, 1970 Bug' Can Brick Pre-iOS 9.3.1 Devices Over Compromised Wi-Fi Networks. Процитовано 15 листопада 2016.

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.