Systémový čas - System time

Unixový příkaz data

Ve vědě o počítačích a programování , systémový čas reprezentuje představu počítačový systém tohoto plynutí času. V tomto smyslu zahrnuje čas také plynutí dnů v kalendáři .

Systémový čas je měřen systémovými hodinami , které jsou obvykle implementovány jako prostý počet ticků , které proběhly od nějakého libovolného počátečního data, nazývaného epocha . Například, Unix a POSIX -kompatibilní systémy času kódování systému ( „ Unix čas “), jako je počet sekund uplynulých od začátku Unix epochy 1. ledna 1970 00:00:00 UT , s výjimkami pro sekund skoku . Systémy, které implementují 32bitovou a 64bitovou verzi Windows API , jako Windows 9x a Windows NT , poskytují systémový čas jako SYSTEMTIME , reprezentovaný jako hodnota rok/měsíc/den/hodina/minuta/sekunda/milisekundy , a FILETIME , reprezentované jako počet 100 nanosekundových klíšťat od 1. ledna 1601 00:00:00 UT, jak je počítáno v proleptickém gregoriánském kalendáři .

Systémový čas lze převést na kalendářní čas , což je forma vhodnější pro lidské porozumění. Například unixový systémový čas 1 000 000 000 sekund od začátku epochy se překládá do kalendářního času 9. září 2001 01:46:40 UT . Podprogramy knihovny, které zpracovávají takové převody, se mohou také zabývat úpravami časových pásem , letního času (DST), přestupných sekund a nastavení národního prostředí uživatele . Obecně jsou také k dispozici knihovní rutiny, které převádějí kalendářní časy na systémové.

Jiná měření času

Systémový čas úzce souvisí s procesním časem , což je počet z celkového času CPU spotřebovaného prováděcím procesem . Může být rozdělen na čas procesoru uživatele a systému , což představuje čas strávený prováděním kódu uživatele , respektive kódu jádra systému . Časy procesů jsou součtem instrukcí CPU nebo hodinových cyklů a obecně nemají přímou souvislost s časem na zdi .

Systémy souborů sledují časy, kdy jsou soubory vytvářeny, upravovány a/nebo k nimž se přistupuje, ukládáním časových razítek do řídicího bloku souboru (nebo inodu ) každého souboru a adresáře .

Dějiny

Většina osobních počítačů první generace nesledovala data a časy. Patřily mezi ně systémy, které provozovaly operační systém CP/M , stejně jako rané modely Apple II , BBC Micro a Commodore PET . Add-on obvodových desek , které zahrnovaly real-time hodiny čipy s palubní baterie back-up byly k dispozici pro IBM PC a XT , ale IBM AT byl první široce dostupný počítač, který přišel vybavený data / času hardware zabudovaný do základní deska . Před rozsáhlou dostupností počítačových sítí většina osobních počítačových systémů, které sledovaly systémový čas, tak činilo pouze s ohledem na místní čas a nezohledňovalo různá časová pásma .

Díky současné technologii většina moderních počítačů sleduje místní civilní čas, stejně jako mnoho dalších domácích a osobních zařízení, jako jsou videorekordéry , DVR , přijímače kabelové televize , PDA , pagery , mobilní telefony , faxy , telefonní záznamníky , fotoaparáty , videokamery , centrální klimatizace a mikrovlnné trouby .

Mikrokontroléry pracující ve vestavěných systémech (jako jsou Raspberry Pi , Arduino a další podobné systémy ) nemají vždy interní hardware pro sledování času. Mnoho takových řídicích systémů pracuje bez znalosti vnějšího času. Ty, které vyžadují takové informace, obvykle po restartu inicializují svůj základní čas získáním aktuálního času z externího zdroje, například z časového serveru nebo externích hodin, nebo vyzváním uživatele k ručnímu zadání aktuálního času.

Implementace

Systémové hodiny je obvykle implementován jako programovatelný intervalový časovač , který periodicky přerušuje procesor, který pak spustí vykonání časovač přerušení služby rutina. Tato rutina obvykle přidá jedno zaškrtnutí do systémových hodin (jednoduchý čítač) a zvládne další pravidelné úklidové úlohy ( předkup atd.) Před návratem k úkolu, který CPU prováděl před přerušením.

Načítání systémového času

13. října 2021 20:29:48 UTC

Systémový čas Wikipedie, kdy byla tato stránka naposledy generována.
Vyčistěte tuto stránku a aktualizujte toto počítadlo.

Následující tabulky ilustrují metody pro získání systémového času v různých operačních systémech , programovacích jazycích a aplikacích . Hodnoty označené (*) jsou závislé na systému a mohou se v různých implementacích lišit. Všechna data jsou uvedena jako gregoriánská nebo proleptická gregoriánská kalendářní data.

Všimněte si, že rozlišení měření implementace času neznamená stejnou přesnost takových měření. Například systém může vrátit aktuální čas jako hodnotu měřenou v mikrosekundách, ale ve skutečnosti je schopen rozeznat jednotlivá tiknutí hodin s frekvencí pouze 100 Hz (10 ms).

Operační systémy

Operační systém Příkaz nebo funkce Řešení Epocha nebo rozsah
Android java.lang .System.currentTimeMillis () 1 ms 1. ledna 1970
BIOS ( IBM PC ) INT 1Ah, AH = 00h 54,9254 ms
18,2065 Hz
Půlnoc aktuálního dne
INT 1Ah, AH = 02h 1 s Půlnoc aktuálního dne
INT 1Ah, AH = 04h 1 den Od 1. ledna 1980 do 31. prosince 1999 nebo 31. prosince 2079 (v závislosti na systému)
CP/M Plus Blok ovládání systému:
scb $ base+58h , Dny od 1. ledna 1978
scb $ base+5Ah , Hour (BCD)
scb $ base+5Bh , Minute (BCD)
scb $ base+5Ch , Second (BCD)
1 s 1. ledna 1978 do září 2067
Funkce BDOS 69h > ( T_GET ):
slovo , dny od 1. ledna 1978
byte , hodinový (BCD)
byte , minutový (BCD)
byte , druhý (BCD)
DOS ( Microsoft ) C: \>DATUM
C: \>ČAS
10 ms 1. ledna 1980 do 31. prosince 2099
INT 21h, AH = 2Ch ČAS SYSTÉMU
INT 21h, AH = 2Ah DATUM SYSTÉMU
iOS ( Apple ) CFAbsoluteTimeGetCurrent () <1 ms 1. ledna 2001 ± 10 000 let
Operační Systém Mac CFAbsoluteTimeGetCurrent () <1 ms 1. ledna 2001 ± 10 000 let
OpenVMS SYS $ GETTIM () 100 ns 17. listopadu 1858 do 31. července 31 086
gettimeofday() 1 μs 1. ledna 1970 do 7. února 2106
clock_gettime() 1 ns
z/OS STCK 2 −12 μs
244,14 ps
1. ledna 1900 až 17. září 2042 UT
STCKE 1. ledna 1900 až 36 765 n. L
Unix , POSIX
(viz také funkce C data a času )
$datum
čas ()
1 s (*)
1. ledna 1970 až 19. ledna 2038
1. ledna 1970 až 292 277 026 596 AD
gettimeofday() 1 μs
clock_gettime() 1 ns
OS/2 DosGetDateTime () 10 ms 1. ledna 1980 do 31. prosince 2079
Okna GetSystemTime () 1 ms 1. ledna 1601 do 14. září 30,828
GetSystemTimeAsFileTime () 100 ns
GetSystemTimePreciseAsFileTime ()

Programovací jazyky a aplikace

Jazyk/aplikace Funkce nebo proměnná Řešení Epocha nebo rozsah
Ada Ada.Calendar.Clock 100 μs až
20 ms (*)
Od 1. ledna 1901 do 31. prosince 2099 (*)
AWK systime () 1 s (*)
ZÁKLADNÍ , Skutečný ZÁKLADNÍ DATE , DATE $
TIME , TIME $
1 s (*)
Business BASIC DEN , ČAS 0,1 s (*)
C (viz funkce C data a času ) čas() 1 s (*) (*)
C ++ std :: time ()
std :: chrono :: system_clock :: now ()
1 s (*)
1 ns (C ++ 11, závislé na operačním systému)
(*)
C# System.DateTime.Now
System.DateTime.UtcNow
100 ns Od 1. ledna 0001 do 31. prosince 9999
CICS ASKTIME 1 ms 1. ledna 1900
COBOL FUNKCE AKTUÁLNÍ-DATUM 1 s 1. ledna 1601
Lisp (get-universal-time) 1 s 1. ledna 1900
Delphi ( Borland ) datum
čas
1 ms
(plovoucí desetinná čárka)
1. ledna 1900
Delphi
( Embarcadero Technologies )
System.SysUtils.Time 1 ms 0/0/0000 0: 0: 0: 000 až 31/12/9999 23: 59: 59: 999 [sic]
System.SysUtils.GetTime (alias pro System.SysUtils.Time )
System.SysUtils.Date 0/0/0000 0: 0: 0: 000 až 31/12/9999 0: 0: 0: 000 [sic]
System.DateUtils.Today
System.DateUtils.Tomorrow
System.DateUtils.Včera
System.SysUtils.Now 1 s 0/0/0000 0: 0: 0: 000 až 31/12/9999 23: 59: 59: 000 [sic]
System.SysUtils.DayOfWeek 1 den 1 až 7
System.SysUtils.CurrentYear 1 rok (*)
Emacs Lisp (aktuální čas) 1 μs (*) 1. ledna 1970
Erlang erlang: system_time () , os: system_time () Závislé na operačním systému , např. Na Linuxu 1ns 1. ledna 1970
Vynikat datum() ? 0 leden 1900
Fortran DATE_AND_TIME
SYSTEM_CLOCK
(*)

1. ledna 1970
CPU_TIME 1 μs
Jít čas teď() 1 ns 1. ledna 0001
Haskell Time.getClockTime 1 ps (*) 1. ledna 1970 (*)
Data.Time.getCurrentTime 1 ps (*) 17. listopadu 1858 (*)
Jáva java.util.Date ()
System.currentTimeMillis ()
1 ms 1. ledna 1970
System.nanoTime () 1 ns libovolný
Clock.systemUTC () 1 ns libovolný
JavaScript , strojopis (nové datum ()). getTime ()
Date.now ()
1 ms 1. ledna 1970
Matlab Nyní 1 s 0 leden 0000
PŘÍUŠNICE $ H ( zkratka pro $ HOROLOG ) 1 s 31. prosince 1840
LabVIEW Počet tipů 1 ms 00: 00: 00.000 1. ledna 1904
Získejte datum/čas v sekundách 1 ms 00: 00: 00.000 1. ledna 1904
Cíl-C [NSDate timeIntervalSinceReferenceDate] <1 ms 1. ledna 2001 ± 10 000 let
OCaml Unix.time () 1 s 1. ledna 1970
Unix.gettimeofday () 1 μs
Prodloužený Pascal GetTimeStamp () 1 s (*)
Turbo Pascal GetTime ()
GetDate ()
10 ms (*)
Perl čas() 1 s 1. ledna 1970
Čas :: HiRes :: čas 1 μs
PHP time ()
mktime ()
1 s 1. ledna 1970
mikrotime () 1 μs
PureBasic Datum() 1 s 1. ledna 1970 až 19. ledna 2038
Krajta datetime.now (). timestamp () 1 μs (*) 1. ledna 1970
RPG AKTUÁLNÍ (DATUM) , %DATUM
AKTUÁLNÍ (ČAS) , %ČASU
1 s Od 1. ledna 0001 do 31. prosince 9999
AKTUÁLNÍ (TIMESTAMP) , %TIMESTAMP 1 μs
Rubín Čas teď() 1 μs (*) 1. ledna 1970 (do 19. ledna 2038 před Ruby 1.9.2)
Pokec Čas microsecondClock
(VisualWorks)
1 s (ANSI)
1 μs (VisualWorks)
1 s (skřípání)
1. ledna 1901 (*)
Celkový čas Sekundy ( pískání
)
Klíče SystemClockNowSinceSystemClockEpoch
(Chronos)
SQL CURDATE () nebo CURRENT DATE
CURTIME () or CURRENT TIME
GETDATE ()
NOW () or CURRENT TIMESTAMP
SYSDATE ()
3 ms 1. ledna 1753 do 31. prosince 9999 (*)
60 s 1. ledna 1900 až 6. června 2079
Standardní ML Čas teď() 1 μs (*) 1. ledna 1970 (*)
TCL [hodiny sekund] 1 s 1. ledna 1970
[hodiny milisekundy] 1 ms
[hodiny mikrosekundy] 1 μs
[klikání hodin] 1 μs (*) (*)
Windows PowerShell Získat datum 100 ns Od 1. ledna 0001 do 31. prosince 9999
[DateTime] :: Now
[DateTime] :: UtcNow
Visual Basic .NET System.DateTime.Now
System.DateTime.UtcNow
100 ns Od 1. ledna 0001 do 31. prosince 9999

Viz také

Poznámky

  1. ^ a b Dokumentace pro vývojáře Apple není jasná ohledně přesnosti a rozsahu CFAbsoluteTime/CFTimeInterval, kromě dokumentace CFRunLoopTimerCreate, která odkazuje na přesnost „maximálně milisekundy“. Zdá se však, že podobný typ NSTimeInterval je zaměnitelný a má uvedenou přesnost a rozsah.
  2. ^ B c d C standardní knihovna nespecifikuje žádné řešení konkrétní, epochu, rozsah, nebo datový typ pro systém časových hodnot . Knihovna C ++ zahrnuje knihovnu C, takže používá stejnou implementaci systémového času jako C.

Reference

externí odkazy