Unix tid

Unix-tid ( engelsk  Unix-tid , også POSIX-tid ) er et system til at beskrive øjeblikke i tid, vedtaget i Unix og andre POSIX - kompatible operativsystemer . Defineret som antallet af sekunder siden midnat (00:00:00 UTC ) 1. januar 1970 (torsdag); dette øjeblik kaldes "Unix-epoken" ( eng.  Unix-epoken ).

Heltalsrepræsentation

Unix-tid er repræsenteret af et heltal , der stiger for hvert sekund, der går uden behov for beregninger for at bestemme år, måned, dag, time eller minut for menneskelig læsbarhed. Moderne Unix-tid er i overensstemmelse med UTC  - nedtællingen er i SI sekunder . Tidsspændet på én dag er næsten altid opdelt i 86.400 sekunder , men når skudsekunder erklæres, er det 86.401 sekunder . Sådanne sekunder holder ifølge Universal Time længden af ​​dagene synkroniseret med tidspunktet for planetens revolution. I Unix-tid gentages de tilsvarende sekundtal, dvs. springsekunder tælles ikke.

Klokken 00:00:00 UTC den 1. januar 1970 (torsdag) er Unix-tiden nul. Fra dette tidspunkt stiger antallet med en vis mængde pr. dag. Den 16. september 2004 kl. 00:00:00, 12677 dage efter Unix-tiden startede, ville tiden f.eks. være 12677 × 86400 = 1095292800 , eller i tilfælde af 17. december 2003 kl. 00:00:00 12403 dage efter starten af ​​nedtællingen vil tiden være tallet 12403 × 86400 = 1 071 619 200 . Beregninger kan også udføres omvendt ved at bruge negative tal. For eksempel er datoen 4. oktober 1957 00:00:00, som er 4472 dage før starten af ​​nedtællingen, repræsenteret i Unix-tid med tallet −4472 × 86400 = −386380800 [1] .

Hver dag beregnes tallet, der repræsenterer Unix-tid, som beskrevet i UTC (00:00:00Z), og stiger nøjagtigt 1 pr. sekund fra midnat . Derfor vil tidspunktet 16-09-2004 17:55:43.54 , svarende til 64.543.54 sekunder fra midnat på denne dato, fra eksemplet ovenfor, være repræsenteret i Unix-tid med tallet 1.095.292.800 + 64.543.094 = 3.54 . For datoer før starten af ​​nedtællingen stiger tallet også, det vil sige, at det med tiden nærmer sig nul [2] .

Det anvendte heltalssystem er praktisk at bruge til at sammenligne og gemme datoer (dato og klokkeslæt i dette format tager kun 4 eller 8 bytes ). Hvis du har brug for at henvise til datoelementer (dag, måned, år), kan sekunder konverteres til et hvilket som helst passende format (og omvendt).

Programmer bruger den signerede heltalstype til at gemme Unix - tid . Signerede 32-bit numre kan referere til tidspunkter fra fredag ​​den 13. december 1901, 20:45:52 til tirsdag den 19. januar 2038, 03:14:07 inklusive.

For at få den aktuelle Unix-tid på de fleste Unix-lignende systemer kan du bruge kommandoen date +%s .

Kritiske værdier

Minimumsdatoen i signeret 32-bit notation er 13. december 1901 , 20:45:52 UTC (0x80000000, -2.147.483.648 sekunder fra 1. januar 1970).

En potentielt kritisk dato var den 9. september 2001 , 01:46:40 UTC , svarende til et gigasekund (milliard sekunder) Unix-tid, hvor decimalrepræsentationen oversteg 9 positioner, hvilket kunne påvirke driften af ​​nogle medicinske applikationer [3] .

Den vigtigste kritiske dato set fra Unix-tiden er den 19. januar 2038 kl. 03:14:08 UTC, hvor værdien af ​​en variabel af typen, der time_ttæller antallet af sekunder , der er gået siden 1. januar 1970 , når 2 31 , hvilket kan føre til en fejlagtig fortolkning af dette tal som negativt . Komplekset af risici forbundet med denne dato er blevet kaldt problemet i 2038 . En mulig løsning på dette problem er at bruge ikke en 32- bit , men en 64-bit variabel til lagring af tid (hvilket gøres i alle moderne 64-bit operativsystemer), dette vil være nok til 292 milliarder år [4] .

Problemet med Apple iOS som et Unix-system

Apples 64-bit iOS - enheder har et problem som Unix-system: hvis du indstiller tiden på en 64-bit iOS-enhed til én om morgenen den 1. januar 1970 og genstarter enheden, mens du er i tidszonen fra UTC + 1:30 og mere, så efter genstart af enheden vil den ikke tænde, Apple-logoet vil konstant blive vist på skærmen. Dette sker på grund af forskellen i tidszoner, det vil sige: hvis du oversætter tiden til 1:00 den 1. januar 1970 i tidszonen UTC +1:30 eller mere, så går Unix-tidstælleren i minus, hvilket systemet er ikke i stand til at forstå, da nedtællingen er fra UTC, som et resultat af hvilket enheden fryser. Enheden gendannes ikke via DFU, men problemet har to løsninger på andre måder. Den første måde: vent, indtil telefonens batteri løber helt tør, og selve tælleren nulstilles. Den anden måde: adskil enheden og afbryd batteriet i et stykke tid, og saml derefter enheden igen, tælleren nulstilles også, og enheden vil fungere.

Problemet er endelig løst i iOS 9.3.1 [5]  - nu er det muligt at indstille datoen på enheden fra 1. januar 2001.

Noter

  1. Generelle begreber . pubs.opengroup.org. Hentet 3. november 2015. Arkiveret fra originalen 22. december 2017.
  2. UNIX nærmer sig moden alderdom på én milliard (link utilgængeligt) . www.electromagnetic.net. Hentet 3. november 2015. Arkiveret fra originalen 13. april 2013. 
  3. The Risks Digest, bind 21, hæfte 69 . Risk Digest. Hentet 3. november 2015. Arkiveret fra originalen 22. oktober 2015.
  4. Hvad er år 2038-problemet? . hvordan ting fungerer. Dato for adgang: 3. november 2015. Arkiveret fra originalen 9. januar 2011.
  5. Ny version af '1. januar 1970 Bug' Can Brick Pre-iOS 9.3.1-enheder over kompromitterede Wi-Fi-netværk (13. april 2016). Hentet 16. august 2016. Arkiveret fra originalen 16. august 2016.

Links