Час Unix
Час Unix чи час POSIX — система для опису моментів в часі, а саме кількістю секунд, які минули від початку епохи (півночі за всесвітнім координованим часом в четвер, першого січня, 1970-того року). (Час Unix є означеним і в давніші моменти, але там він є від'ємним). Додаткові секунди, оголошені Міжнародною службою обертання землі та систем відліку, не враховуються, бо не є детермінованими. Широко використовується в Unix-подібних та багатьох інших операційних системах, платформах та файлових форматах. Час Unix на деяких з них можна отримати за допомогою команди date +%s
.
Поточний UNIX-час: 1732634845 (15:27, 26 листопада 2024 UTC) (Вище вказано час останньої генерації цієї сторінки.) |
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 |
У 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]
- ↑ General Concepts. pubs.opengroup.org. Архів оригіналу за 22 грудня 2017. Процитовано 15 листопада 2016.
- ↑ Broussard, Mitchel. New Version of 'January 1, 1970 Bug' Can Brick Pre-iOS 9.3.1 Devices Over Compromised Wi-Fi Networks. Архів оригіналу за 16 серпня 2016. Процитовано 15 листопада 2016.
- Конвертер Час Unix багатомовний [Архівовано 5 грудня 2014 у Wayback Machine.]