Systémový čas - System time
v počítačová věda a programování, systémový čas představuje představu počítačového systému o plynutí času. V tomto smyslu, čas zahrnuje také absolvování dnů v kalendáři.
Systémový čas se měří a systémové hodiny, který je obvykle implementován jako jednoduchý počet z počtu klíšťata které se objevily od libovolného počátečního data, nazývaného epocha. Například, Unix a POSIX -kompatibilní systémy kódují systémový čas ("Unixový čas ") jako počet sekund, které uplynuly od začátku Unixová epocha 1. ledna 1970 00:00:00 UT, s výjimkami pro přestupné sekundy. Systémy, které implementují 32bitovou a 64bitovou verzi Windows API, jako Windows 9x a Windows NT, poskytněte systémový čas jako oba SYSTÉMOVÝ ČAS, představovaný jako hodnota rok / měsíc / den / hodina / minuta / sekunda / milisekundy, a FILETIME, představovaný jako počet 100-nanosekundových klíšťat od 1. ledna 1601 00:00:00 UT, jak je počítáno v proleptický gregoriánský kalendář.
Systémový čas lze převést na kalendářní čas, což je forma vhodnější pro lidské porozumění. Například systém Unix čas 1000000000 sekund od začátku epochy se promítne do kalendářního času 9. září 2001 01:46:40 UT. Knihovna podprogramy kteří zpracovávají takové převody, se mohou také zabývat úpravami pro časová pásma, letní čas (DST), přestupné sekundy a uživatele národní prostředí nastavení. Obecně jsou také poskytovány rutiny knihovny, které převádějí kalendářní časy na systémové.
Další měření času
Úzce souvisí se systémovým časem doba zpracování, což je počet z celkového počtu procesor čas spotřebovaný vykonávajícím proces. Může být rozdělena na uživatel a Systém Čas CPU, představující čas strávený prováděním uživatelského kódu a systému jádro kód, resp. Časy procesu jsou záznamem CPU instrukce nebo hodinové cykly a obecně nemají přímou korelaci s čas na zeď.
Systémy souborů sledovat časy, kdy jsou soubory vytvářeny, upravovány a / nebo přistupovány ukládáním časová razítka v blok ovládání souboru (nebo inode ) každého soubor a adresář.
Dějiny
Většina první generace osobní počítače nesledoval data a časy. Jednalo se o systémy, které provozovaly CP / M operační systém, stejně jako rané modely Apple II, BBC Micro a Commodore PET, mezi ostatními. Doplněk periferní desky to zahrnovalo hodiny v reálném čase čipy s integrovaným bateriová záloha byly k dispozici pro IBM PC a XT, ale IBM AT byl první široce dostupný počítač, který byl vybaven hardwarem pro datum a čas zabudovaným do počítače základní deska. Před širokou dostupností počítačové sítě, většina osobních počítačových systémů, které sledovaly systémový čas, tak činila pouze s ohledem na místní čas a nedělala přirážky k různým časová pásma.
Se současnou technologií většina moderních počítačů sleduje místní občanský čas, stejně jako mnoho jiných domácích a osobních zařízení, jako je Videorekordéry, DVR, přijímače kabelové televize, PDA, pagery, mobily, faxové přístroje, telefonní záznamníky, kamery, videokamery, centrální klimatizace, a mikrovlnné trouby.
Mikrokontroléry působící uvnitř vestavěné systémy (tak jako Raspberry Pi, Arduino, a další podobné systémy ) ne vždy mají interní hardware pro sledování času. Mnoho takových řídicích systémů pracuje bez znalosti vnějšího času. Ti, kteří takové informace vyžadují, obvykle inicializují svůj základní čas restart získáním aktuálního času z externího zdroje, například z a časový server nebo externí hodiny nebo výzva uživatel může ručně zadat aktuální čas.
Implementace
The systémové hodiny je obvykle implementován jako programovatelný intervalový časovač který periodicky přerušuje CPU, který poté začne vykonávat servisní rutinu časovače přerušení. Tato rutina obvykle přidává jedno zaškrtnutí k systémovým hodinám (jednoduché počítadlo) a zpracovává další pravidelné úkoly v domácnosti (preempce atd.) před návratem k úkolu, který CPU prováděla před přerušením.
Načítání systémového času
Následující tabulky ilustrují metody pro načtení systémového času různými způsoby operační systémy, programovací jazyky, a aplikace. Hodnoty označené (*) jsou závislé na systému a mohou se u různých implementací lišit. Všechna data jsou uvedena jako gregoriánský nebo proleptický gregoriánský kalendář Termíny.
Všimněte si, že rozlišení měření času implementace neznamená totéž přesnost těchto měření. Například by systém mohl vrátit aktuální čas jako hodnotu měřenou v mikrosekundách, ale ve skutečnosti je schopen rozlišit jednotlivé taktovací hodiny s frekvencí pouze 100 Hz (10 ms).
Operační systémy
Operační systém | Příkaz nebo funkce | Rozlišení | Epocha nebo rozsah |
---|---|---|---|
Android | java.lang | 1 ms | 1. ledna 1970 |
BIOS (IBM PC ) | INT 1 Ah, AH = 00 hodin[1] | 54,9254 ms 18,2065 Hz | Půlnoc aktuálního dne |
INT 1 Ah, AH = 02 h[2] | 1 s | Půlnoc aktuálního dne | |
INT 1 Ah, AH = 04 h[3] | 1 den | 1. ledna 1980 až 31. prosince 1999 nebo 31. prosince 2079 (v závislosti na systému) | |
CP / M Plus | Blok ovládání systému:[4] scb $ základna + 58h, Dny od 1. ledna 1978 scb $ základna + 5Ah, Hodina (BCD) scb $ základna + 5Bh, Minuta (BCD) scb $ základna + 5Ch, Druhý (BCD) | 1 s | Od 1. ledna 1978 do září 2067 |
Funkce BDOS 69h> (T_GET):[5] slovo„Dny od 1. ledna 1978 byte, Hodina (BCD) byte, Minuta (BCD) byte, Druhý (BCD) | |||
DOS (Microsoft ) | C:>DATUM C:>ČAS | 10 ms | Od 1. ledna 1980 do 31. prosince 2099 |
INT 21h, AH = 2Ch ČAS SYSTÉMU[6] INT 21h, AH = 2Ah DATUM SYSTÉMU[7] | |||
iOS (Jablko ) | CFAbsoluteTimeGetCurrent ()[8] | <1 ms | 1. ledna 2001 ± 10 000 let |
Operační Systém Mac | CFAbsoluteTimeGetCurrent ()[9] | <1 ms[10][poznámka 1] | 1. ledna 2001 ± 10 000 let[10][poznámka 1] |
OpenVMS | SYS $ GETTIM () | 100 ns | 17. listopadu 1858 až 31 086 AD |
z / OS | STCK[11]:7–187 | 2−12 μs 244,14 ps[11]:4–45, 4–46 | 1. ledna 1900 až 17. září 2042 UT[12] |
Unix, POSIX (viz také C. Funkce data a času ) | $datum čas() | 1 s | (*) 1. ledna 1970 do 19. ledna 2038 1. ledna 1970 až 292 277 026 596 n. L |
() | 1 μs | ||
() | 1 ns | ||
OS / 2 | DosGetDateTime () | 10 ms | Od 1. ledna 1980 do 31. prosince 2079[13] |
Okna | GetSystemTime () | 1 ms | 1. ledna 1601 až 14. září 30 828[14] |
GetSystemTimeAsFileTime () | 100 ns | ||
GetSystemTimePreciseAsFileTime () |
Programovací jazyky a aplikace
Jazyk / aplikace | Funkce nebo proměnná | Rozlišení | Epocha nebo rozsah |
---|---|---|---|
Ada | Hodiny Ada.Calendar | 100 μs až 20 ms (*) | Od 1. ledna 1901 do 31. prosince 2099 (*) |
AWK | systime () | 1 s | (*) |
ZÁKLADNÍ, True BASIC | DATUM, DATUM $ ČAS, TIME $ | 1 s | (*) |
Business BASIC | DEN, TIM | 0,1 s | (*) |
C (vidět C. Funkce data a času ) | čas() | 1 s (*)[poznámka 2] | (*)[poznámka 2] |
C ++ | std :: time () std :: chrono :: system_clock :: now () | 1 s (*)[poznámka 2] 1 ns (C ++ 11, OS OS) | (*)[poznámka 2] |
C# | System.DateTime.Now[15] System.DateTime.UtcNow[16] | 100 ns[17] | 1. ledna 0001 až 31. prosince 9999 |
CICS | ASKTIME | 1 ms | 1. ledna 1900 |
COBOL | FUNKCE AKTUÁLNÍ DATUM | 1 s | 1. ledna 1601 |
Společný Lisp | (get-universal-time) | 1 s | 1. ledna 1900 |
Delphi (Borland ) | datum čas | 1 ms (plovoucí bod) | 1. ledna 1900 |
Delphi (Embarcadero Technologies )[18] | System.SysUtils.Time[19] | 1 ms | 0/0/0000 0: 0: 0: 000 až 12/31/9999 23: 59: 59: 999 [sic] |
System.SysUtils.GetTime[20] (alias pro System.SysUtils.Time) | |||
System.SysUtils.Date[21] | 0/0/0000 0: 0: 0: 000 až 12/31/9999 0: 0: 0: 000 [sic] | ||
System.DateUtils.Today[22] | |||
System.DateUtils.Tomorrow[23] | |||
System.DateUtils.Včera[24] | |||
System.SysUtils.Now[25] | 1 s | 0/0/0000 0: 0: 0: 000 až 12/31/9999 23: 59: 59: 000 [sic] | |
System.SysUtils.DayOfWeek[26] | 1 den | 1 až 7 | |
System.SysUtils.CurrentYear[27] | 1 rok | (*) | |
Emacs Lisp | (aktuální čas) | 1 μs (*) | 1. ledna 1970 |
Erlang | erlang: system_time (), os: system_time ()[28] | OS závislý, např. na Linux 1ns[28] | 1. ledna 1970[28] |
Vynikat | datum() | ? | 0 ledna 1900[29] |
Fortran | DATUM A ČAS SYSTEM_CLOCK | (*)[30] | 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 ()[32] | 1 ns | libovolný[32] | |
Clock.systemUTC ()[33] | 1 ns | libovolný[34] | |
JavaScript, Strojopis | (nové datum ()). getTime () Date.now () | 1 ms | 1. ledna 1970 |
Matlab | Nyní | 1 s | 0 ledna 0000[35] |
PŘÍUŠNICE | $ H (zkratka pro $ HOROLOG) | 1 s | 31. prosince 1840 |
LabVIEW | Počet zaškrtnutí | 1 ms | 00: 00: 00 000, 1. ledna 1904 |
Získejte datum a čas během několika sekund | 1 ms | 00: 00: 00 000, 1. ledna 1904 | |
Cíl-C | [NSDate timeIntervalSinceReferenceDate] | <1 ms[36] | 1. ledna 2001 ± 10 000 let[36] |
OCaml | Unix.time () | 1 s | 1. ledna 1970 |
Unix.gettimeofday () | 1 μs | ||
Rozšířený Pascal | GetTimeStamp () | 1 s | (*) |
Turbo Pascal | GetTime () GetDate () | 10 ms | (*) |
Perl | čas() | 1 s | 1. ledna 1970 |
Čas :: HiRes :: čas[37] | 1 μs | ||
PHP | čas() mktime () | 1 s | 1. ledna 1970 |
mikrotime () | 1 μs | ||
PureBasic | Datum() | 1 s | Od 1. ledna 1970 do 19. ledna 2038 |
Krajta | datetime.now (). timestamp () | 1 μs (*) | 1. ledna 1970 |
RPG | DNEŠNÍ DATUM), %DATUM AKTUÁLNÍ ČAS), %ČAS | 1 s | 1. ledna 0001 až 31. prosince 9999 |
AKTUÁLNÍ (ČASOVÁ ZNÁMKA), % TIMESTAMP | 1 μs | ||
Rubín | Čas teď()[38] | 1 μs (*) | 1. ledna 1970 (do 19. ledna 2038 před Ruby 1.9.2[39]) |
Pokec | Čas mikrosekundy Hodiny (VisualWorks) | 1 s (ANSI) 1 μs (VisualWorks) 1 s (Kvičet) | 1. ledna 1901 (*) |
Celkový čas v sekundách (Kvičet) | |||
SystemClock ticksNowSinceSystemClockEpoch (Chronos) | |||
SQL | CURDATE () nebo DNEŠNÍ DATUM CURTIME () nebo AKTUÁLNÍ ČAS GETDATE () NYNÍ() nebo AKTUÁLNÍ ČASOVAČKA SYSDATE () | 3 ms | 1. ledna 1753 až 31. prosince 9999 (*) |
60 s | 1. ledna 1900 až 6. června 2079 | ||
Standardní ML | Čas teď() | 1 μs (*) | 1. ledna 1970 (*) |
TCL | [hodiny vteřiny] | 1 s | 1. ledna 1970 |
[hodiny milisekundy] | 1 ms | ||
[hodiny mikrosekund] | 1 μs | ||
[kliknutí hodin] | 1 μs (*) | (*) | |
Windows PowerShell | Získejte datum[40][41] | 100 ns[17] | 1. ledna 0001 až 31. prosince 9999 |
[DateTime] :: Nyní[15] [DateTime] :: UtcNow[16] | |||
Visual Basic .NET | System.DateTime.Now[15] System.DateTime.UtcNow[16] | 100 ns[17] | 1. ledna 0001 až 31. prosince 9999 |
Viz také
- Kalendář
- Čas výpočtu
- DATE (příkaz)
- Epocha
- GPS čas
- Okamžik
- Síťový časový protokol
- Proces
- datum
- TIME (příkaz)
- čas. h
- time_t
- Chyby při formátování a ukládání času
- TIME protokol
- Sdílení času
- Časový standard
- Časovač
- Časové razítko
- Unixový příkaz datum
- Unixový čas
- Unixový časový příkaz
- Čas na nástěnné hodiny
- Problém roku 2000
- Problém roku 2038
Poznámky
- ^ A b Dokumentace vývojáře Apple není jasná ohledně přesnosti a rozsahu CFAbsoluteTime / CFTimeInterval, s výjimkou dokumentace CFRunLoopTimerCreate, která odkazuje na přesnost maximálně „milisekund“. Podobný typ NSTimeInterval se zdá být zaměnitelný a má uvedenou přesnost a rozsah.
- ^ A b C d The C standardní knihovna neurčuje žádné konkrétní rozlišení, epochu, rozsah ani datový typ hodnoty systémového času. Knihovna C ++ zahrnuje knihovnu C, takže používá stejnou implementaci systémového času jako C.
Reference
- ^ Ralf D. Brown (2000). „Int 0x1A, AH = 0x00“. Seznam přerušení Ralfa Browna.
- ^ Ralf D. Brown (2000). „Int 0x1A, AH = 0x02“. Seznam přerušení Ralfa Browna.
- ^ Ralf D. Brown (2000). „Int 0x1A, AH = 0x04“. Seznam přerušení Ralfa Browna.
- ^ „Průvodce operačním systémem CP / M Plus (CP / M verze 3.0)“ (PDF).
- ^ „Systémová volání BDOS“.
- ^ Ralf D. Brown (2000). „Int 0x21, AH = 0x2c“. Seznam přerušení Ralfa Browna.
- ^ Ralf D. Brown (2000). „Int 0x21, AH = 0x2a“. Seznam přerušení Ralfa Browna.
- ^ „Time Utilities Reference“. Knihovna vývojářů pro iOS. 2007.
- ^ „Time Utilities Reference“. Knihovna vývojářů pro Mac OS X.. 2007.
- ^ A b „CFRunLoopTimerCreate - základní nadace“. Dokumentace pro vývojáře Apple. 2007.
- ^ A b z / Architektonické principy fungování (PDF). Poughkeepsie, New York: International Business Machines. 2007.
- ^ IBM hodlá rozšířit rozsah dat na budoucích systémech po roce 2042. z / Architektonické principy fungování (Poughkeepsie, New York: International Business Machines, 2007) 1-15, 4-45 až 4-47.
- ^ Jonathan de Boyne Pollard. „32bitový tlumočník příkazů“.
Na OS / 2 Warp 4 mohou datum a čas fungovat i po roce 2000 a dokonce i po roce 2038 a ve skutečnosti až do roku 2079, což je limit pro hodiny reálného času OS / 2 Warp 4 .
- ^ Anders Thulin (6. dubna 2013). „Interpretace časových značek NTFS“. Forenzní zaměření.
- ^ A b C Vlastnost „DateTime.Now“. Dokumenty Microsoftu.
- ^ A b C "Vlastnost DateTime.UtcNow". Dokumenty Microsoftu.
- ^ A b C Vlastnost „DateTime.Ticks“. Dokumenty Microsoftu.
- ^ „Podpora data a času“. Síť vývojářů Embarcadero. 2013.
- ^ "System.SysUtils.Time". Síť vývojářů Embarcadero. 2013.
- ^ "System.SysUtils.GetTime". Síť vývojářů Embarcadero. 2013.
- ^ "System.SysUtils.Date". Embarcadero Developer Network '. 2013.
- ^ „System.DateUtils.Today"". Síť vývojářů Embarcadero. 2013.
- ^ "System.DateUtils.Tomorrow". Síť vývojářů Embarcadero. 2013.
- ^ „System.DateUtils.Yesterday“. Síť vývojářů Embarcadero. 2013.
- ^ "System.SysUtils.Now". Síť vývojářů Embarcadero. 2013.
- ^ "System.SysUtils.DayOfWeek". Síť vývojářů Embarcadero. 2013.
- ^ "System.SysUtils.CurrentYear". Síť vývojářů Embarcadero. 2013.
- ^ A b C Oprava času a času v Erlangu
- ^ „XL2000: Počáteční data v tabulkové komponentě Office se liší od aplikace Excel“. Podpora společnosti Microsoft. 2003. Archivovány od originál dne 24. října 2007.
V komponentě tabulky Microsoft Office se hodnota 0 vyhodnotí k datu 30. prosince 1899 a hodnota 1 se vyhodnotí k 31. prosinci 1899. ... V aplikaci Excel se hodnota 0 vyhodnotí k 0 lednu 1900 a hodnota 1 se vyhodnotí na 1. ledna 1900.
- ^ „SYSTEM_CLOCK“. Příručka a reference pro vývojáře Intel Fortran Compiler 19.0. 29. dubna 2019. Citováno 23. července 2019.
- ^ "SYSTEM_CLOCK - funkce času". Překladač GNU Fortran. Citováno 27. října 2011.
- ^ A b „Metoda System.nanoTime ()“. Platforma Java, Standard Edition 6: Specifikace API. 2015. Citováno 23. července 2019.
- ^ "Clock.systemUTC () a další metody". Java Platform, Standard Edition 8: Specifikace API. 2014. Citováno 15. ledna 2015.
- ^ „JSR-310 Java Time System“. Platforma Java, Standard Edition 8: Specifikace API. 2014. Citováno 15. ledna 2015.
- ^ "Nápověda Matlab".
- ^ A b „NSTimeInterval - nadace“. Dokumentace pro vývojáře Apple.
- ^ Douglas Wegscheild, R. Schertler a Jarkko Hietaniemi, „Time :: HiRes“. CPAN - komplexní síť Perl Archive. 2011. Citováno 27. října 2011.
- ^ James Britt; Neurogami. "Časová třída". Ruby-Doc.org: Nápověda a dokumentace pro programovací jazyk Ruby. Scottsdale, AZ. Citováno 27. října 2011.
- ^ Yugui (18. srpna 2010). „Je vydán Ruby 1.9.2“.
Nový 1.9.2 je téměř kompatibilní s 1.9.1, s výjimkou těchto změn: ... Čas je znovu implementován. Chyba s rokem 2038 je opravena.
- ^ „Používání rutiny Get-Date“. Dokumenty Microsoftu. Citováno 23. července 2019.
- ^ „Windows PowerShell Tip týdne - formátování dat a časů“. Dokumenty Microsoftu. Citováno 23. července 2019.
externí odkazy
- Kritická a významná data J. R. Stockton (vyvoláno 3. prosince 2015)
- Knihovna Boost Date / Time (C ++)
- Knihovna Boost Chrono (C ++)
- Knihovna data a času Chronos (Pokec)
- Joda Time „Knihovna data a času Joda (Java)
- Projekt Perl DateTime (Perl)
- datum: Dokumentace standardní knihovny Ruby (Rubín)