Hora do sistema

Na ciência da computação e programação de computadores, hora do sistema representa a noção da passagem de tempo de um computador. Nesse sentido, hora também inclui a contagem de dias no calendário.
A hora do sistema é marcada por um relógio do sistema, que é tipicamente implementado como um contador simples do número de ticks que transpiram desde uma data inicial, chamada era. Por exemplo, Sistemas em conformidade com Unix e POSIX codificam a hora do sistema ("Hora Unix") como o número de segundos passados desde o início da era Unix marcada em 1 de janeiro de 1970 às 00:00:00 UTC, excluindo segundos intercalados. Sistemas que implementam as versões de 32-bit e 64-bit da API do Windows, como o Windows 9x e Windows NT, fornecem a hora do sistema como SYSTEMTIME, representado como um valor de ano/mês/dia/hora/minuto/milissegundo e FILETIME representado como um contador dos ticks de 100 nanosegundos passados desde 1 de janeiro de 1601 às 00:00:00 UTC como constatado no calendário gregoriano proléptico.
A hora do sistema pode ser convertida em uma data, que é uma forma mais adequada à compreensão humana. Por exemplo, a hora do sistema Unix 1000000000 segundos desde o inicio da era é traduzida para a data 9 de setembro de 2001 às 01:46:40 UT. Bibliotecas de sub-rotinas que cuidam de tais conversões também podem lidar com os ajustes de fuso horário, horário de verão, segundos intercalados e as configurações de locale do usuário. Bibliotecas de rotinas, geralmente, também fornecem a conversão de datas para hora do sistema.
Outras medidas de tempo
[editar | editar código-fonte]Também é relacionado à hora do sistema o tempo de processo, que é um contador do tempo da CPU consumido pela execução de um processo, pode ser dividido entre tempo da CPU do usuário e do sistema, representando o tempo gasto executando códigos do usuário e códigos do núcleo do sistema, respectivamente. tempos de processo são uma contagem de instruções da CPU ou ciclos do relógio e geralmente não estão relacionadas diretamente ao tempo realmente decorrido.
Sistemas de arquivos mantém registro da hora que arquivos são criados, modificados e/ou acessados armazenando marcas temporais no bloco de controle de arquivos (ou Nó-i) de cada arquivo e diretório.
História
[editar | editar código-fonte]A maioria dos computadores pessoais de primeira geração não marcavam a data e hora. Incluindo sistemas que rodavam o sistema operacional CP/M, também com os primeiros modelos do Apple II, o BBC Micro e o Commodore PET, entre outros. Periféricos que incluíam chips de relógios de tempo real com baterias de backup embutidas estavam disponíveis para o IBM PC e XT, mas o IBM AT foi o primeiro PC de ampla disponibilidade que já vinha equipado com hardware de data/hora embutido na placa-mãe. Antes da disponibilidade geral das redes de computadores, a maioria dos sistemas de computadores pessoais que marcavam a hora do sistema, só marcavam o tempo local e não levavam em conta fuso horários diferentes.
Com a tecnologia atual, a maioria dos computadores modernos marcam o tempo local, assim como muitos outros dispositivos pessoais e domésticos como: Videocassete, DVRs, codificadores de TV a cabo, assistentes digitais, pagers, celulares, máquinas de fax, secretárias eletrônicas, cameras, camcorders, aparelhos de ar condicionado e fornos de micro-ondas.
Microcontroladores que operam em sistemas embutidos (como o Raspberry Pi, Arduino e outros sistemas similares) nem sempre tem hardware interno para marcar o tempo. Muitos destes sistemas de controle operam sem saber o tempo externo. Aqueles que precisam de tal informação geralmente iniciam sua base de tempo ao reinicializar, obtendo a hora atual de uma fonte externa como: um servidor de horário, relógio externo ou pedindo ao usuário que insira a hora atual manualmente.
Implementação
[editar | editar código-fonte]O relógio do sistema é normalmente implementado como um temporizador de intervalo programável que periodicamente interrompe a CPU, que então executa uma rotina de serviço de interrupção de temporizador. Essa rotina geralmente adiciona um tick ao relógio do sistema (um contador simples) e cuida de outras tarefas de manutenção periódicas (Preemptividade, etc.) antes de retornar à tarefa que a CPU estava executando antes da interrupção.
Consultando a hora do sistema
[editar | editar código-fonte]As tabelas a seguir mostram métodos de acessar a hora do sistema em diversos sistemas operacionais, linguagens de programação e aplicações. Valores marcados por (*) dependem do sistema e podem diferir entre implementações. Todas as datas estão marcadas como se no calendário gregoriano ou no calendário gregoriano proléptico.
Note que a resolução de uma implementação de medida de tempo não implica a mesma precisão de tal medida. Por exemplo, um sistema pode retornar a hora atual como um valor em microssegundos, mas na realidade ser capaz de discernir ticks individuais de relógio com uma frequência de apenas 100 Hz (10 ms).
Sistemas operacionais
[editar | editar código-fonte]Sistema operacional | Comando ou função | Resolução | Era ou faixa |
---|---|---|---|
Android | java.lang |
1 ms | 1 de janeiro de 1970 |
BIOS (IBM PC) | INT 1Ah, AH=00h[1] | 54,9254 ms 18,2065 Hz |
Meia-noite do dia atual |
INT 1Ah, AH=02h[2] | 1 s | Meia-noite do dia atual | |
INT 1Ah, AH=04h[3] | 1 dia | 1 de janeiro de 1980 ou 31 de dezembro de 1999 (depende do sistema) | |
CP/M Plus | System Control Block:[4] scb$base+58h, Days since 31 December 1977 scb$base+5Ah, Hour (BCD) scb$base+5Bh, Minute (BCD) scb$base+5Ch, Second (BCD) |
1 s | 31 de dezembro de 1977 até 5 de junho de 2157 |
BDOS function 69h> (T_GET):[5] word, Days since 1 January 1978 byte, Hour (BCD) byte, Minute (BCD) byte, Second (BCD) | |||
DOS (Microsoft) | C:\>DATE
|
10 ms | 1 de janeiro de 1980 até 31 de dezembro de 2099 |
INT 21h, AH=2Ch SYSTEM TIME [6]INT 21h, AH=2Ah SYSTEM DATE [7]
| |||
iOS (Apple) | CFAbsoluteTimeGetCurrent() [8]
|
< 1 ms | 1 de janeiro de 2001 ±10.000 anos |
macOS | CFAbsoluteTimeGetCurrent() [9]
|
< 1 ms[10][note 1] | 1 de janeiro de 2001 ±10.000 anos[10][note 1] |
OpenVMS | SYS$GETTIM()
|
100 ns[11] | 17 de novembro de 858 até 31 de julho de 31.086[12] |
gettimeofday() | 1 μs[13] | 1 de janeiro de 1970 até 7 de fevereiro de 2106[14] | |
clock_gettime() | 1 ns[13] | ||
z/OS | STCK [15]:7–187
|
2−12 μs 244,14 ps[15]:4-45, 4-46 |
1 de janeiro de 1900 até 17 de setembro de 2042 UTC |
STCKE
|
1 de janeiro de 1900 até 36.765 d.C.[16] | ||
Unix, POSIX (ver tambémtime.h) |
$date time()
|
1 s | (*) 1 de janeiro de 1970 (até 19 de janeiro de 2038 antes do Linux 5.9) até 2 de julho de 2486 (após o Linux 5.10) 1 de janeiro de 1970 até 4 de dezembro de 292.277.026.596 d.C. |
gettimeofday() | 1 μs | ||
clock_gettime() | 1 ns | ||
OS/2 | DosGetDateTime()
|
10 ms | 1 de janeiro de 1980 até 31 de dezembro de 2079[17] |
Windows | GetSystemTime()
|
1 ms | 1 de janeiro de 1601 até 14 de setembro de 30.828, às 02:48:05,4775807 |
GetSystemTimeAsFileTime()
|
100 ns | ||
GetSystemTimePreciseAsFileTime()
|
Linguagens de programação e aplicações
[editar | editar código-fonte]Linguagem/Aplicação | Função ou variável | Resolução | Era ou faixa |
---|---|---|---|
Ada | Ada.Calendar.Clock
|
100 μs até 20 ms (*) |
1 de janeiro de 1901 até 31 de dezembro 2099 (*) |
AWK | systime()
|
1 s | (*) |
BASIC, True BASIC | DATE , DATE$ TIME , TIME$
|
1 s | (*) |
Business BASIC | DAY , TIM
|
0.1 s | (*) |
C (ver funções de data e hora em C) | time()
|
1 s (*) | (*)[note 2] |
C++ | std::time() std::chrono::system_clock::now()
|
1 s (*)[note 2] 1 ns (C++11, Depende do SO) |
(*)[note 2] |
C# | System.DateTime.Now [18]System.DateTime.UtcNow [19]
|
100 ns[20] | 1 de janeiro de 0001 até 31 de dezembro de 9999 |
CICS | ASKTIME
|
1 ms | 1 de janeiro de 1900 |
COBOL | FUNCTION CURRENT-DATE
|
1 s | 1 de janeiro de 1601 |
Common Lisp | (get-universal-time)
|
1 s | 1 de janeiro de 1900 |
Delphi (Borland) | date time
|
1 ms (floating point) |
1 de janeiro de 1900 |
Delphi (Embarcadero Technologies)[21] |
System.SysUtils.Time [22]
|
1 ms | 0/0/0000 0:0:0:000 até 31/12/9999 às 23:59:59:999 [sic] |
System.SysUtils.GetTime [23] (alias for System.SysUtils.Time )
| |||
System.SysUtils.Date [24]
|
0/0/0000 0:0:0:000 até 31/12/9999, às 0:0:0:000 [sic] | ||
System.DateUtils.Today [25]
| |||
System.DateUtils.Tomorrow [26]
| |||
System.DateUtils.Yesterday [27]
| |||
System.SysUtils.Now [28]
|
1 s | 0/0/0000 0:0:0:000 até 31/12/9999, às 23:59:59:000 [sic] | |
System.SysUtils.DayOfWeek [29]
|
1 day | 1 à 7 | |
System.SysUtils.CurrentYear [30]
|
1 year | (*) | |
Emacs Lisp | (current-time)
|
1 μs (*) | 1 de janeiro de 1970 |
Erlang | erlang:system_time() , os:system_time() [31]
|
Depende do SO, Linux, por exemplo: 1ns[31] | 1 de janeiro de 1970[31] |
Excel | date()
|
? | 0 de janeiro de 1900[32] |
Fortran | DATE_AND_TIME SYSTEM_CLOCK
|
(*)[33] | 1 de janeiro de 1970 |
CPU_TIME
|
1 μs | ||
Go | time.Now()
|
1 ns | 1 de janeiro de 0001 |
Haskell | Time.getClockTime
|
1 ps (*) | 1 de janeiro de 1970 (*) |
Data.Time.getCurrentTime
|
1 ps (*) | 17 de novembro de 1858 (*) | |
Java | java.util.Date() System.currentTimeMillis()
|
1 ms | 1 de janeiro de 1970 |
System.nanoTime() [35]
|
1 ns | arbitrário[35] | |
Clock.systemUTC() [36]
|
1 ns | arbitrário[37] | |
JavaScript, TypeScript | (new Date()).getTime() Date.now()
|
1 ms | 1 de janeiro de 1970 |
Matlab | now
|
1 s | 0 de janeiro de 0000[38] |
MUMPS | $H (abreviação de $HOROLOG )
|
1 s | 31 de dezembro de 1840 |
LabVIEW | Tick Count
|
1 ms | 00:00:00.000 1 de janeiro de 1904 |
Get Date/Time in Seconds
|
1 ms | 00:00:00.000 1 de janeiro de 1904 | |
Objective-C | [NSDate timeIntervalSinceReferenceDate]
|
< 1 ms[39] | 1 de janeiro de 2001 ±10.000 anos[39] |
OCaml | Unix.time()
|
1 s | 1 de janeiro de 1970 |
Unix.gettimeofday()
|
1 μs | ||
Extended Pascal | GetTimeStamp()
|
1 s | (*) |
Turbo Pascal | GetTime() GetDate()
|
10 ms | (*) |
Perl | time()
|
1 s | 1 de janeiro de 1970 |
Time::HiRes::time [40]
|
1 μs | ||
PHP | time() mktime()
|
1 s | 1 de janeiro de 1970 |
microtime()
|
1 μs | ||
PureBasic | Date()
|
1 s | 1 de janeiro de 1970 até 19 de janeiro de 2038 |
Python | datetime.now().timestamp()
|
1 μs (*) | 1 de janeiro de 1970 |
RPG | CURRENT(DATE) , %DATE CURRENT(TIME) , %TIME
|
1 s | 1 de janeiro de 0001 até 31 de dezembro de 9999 |
CURRENT(TIMESTAMP) , %TIMESTAMP
|
1 μs | ||
Ruby | Time.now() [41]
|
1 μs (*) | 1 de janeiro de 1970 (até 19 de janeiro de 2038 antes do Ruby 1.9.2[42]) |
Smalltalk | Time microsecondClock (VisualWorks) |
1 s (ANSI) 1 μs (VisualWorks) 1 s (Squeak) |
1 de janeiro de 1901 (*) |
Time totalSeconds (Squeak) | |||
SystemClock ticksNowSinceSystemClockEpoch (Chronos) | |||
SQL | CURDATE() or CURRENT DATE CURTIME() or CURRENT TIME GETDATE() NOW() or CURRENT TIMESTAMP SYSDATE()
|
3 ms | 1 de janeiro de 1753 até 31 de dezembro de 9999 (*) |
60 s | 1 de janeiro de 1900 até 6 de junho de 2079 | ||
Standard ML | Time.now()
|
1 μs (*) | 1 de janeiro de 1970 (*) |
TCL | [clock seconds]
|
1 s | 1 de janeiro de1970 |
[clock milliseconds]
|
1 ms | ||
[clock microseconds]
|
1 μs | ||
[clock clicks]
|
1 μs (*) | (*) | |
Windows PowerShell | Get-Date [43][44]
|
100 ns[20] | 1 de janeiro de 0001 até 31 de dezembro de 9999 |
[DateTime]::Now [18][DateTime]::UtcNow [19]
| |||
Visual Basic .NET | System.DateTime.Now [18]System.DateTime.UtcNow [19]
|
100 ns[20] | 1 de janeiro de 0001 até 31 de dezembro de 9999 |
Ver também
[editar | editar código-fonte]Notas e referências
Notas
Referências
- ↑ Ralf D. Brown (2000). «Int 0x1A, AH=0x00». Ralf Brown's Interrupt List
- ↑ Ralf D. Brown (2000). «Int 0x1A, AH=0x02». Ralf Brown's Interrupt List
- ↑ Ralf D. Brown (2000). «Int 0x1A, AH=0x04». Ralf Brown's Interrupt List
- ↑ «CP/M Plus (CP/M Version 3.0) Operating System Guide» (PDF)
- ↑ «BDOS system calls»
- ↑ Ralf D. Brown (2000). «Int 0x21, AH=0x2c». Ralf Brown's Interrupt List
- ↑ Ralf D. Brown (2000). «Int 0x21, AH=0x2a». Ralf Brown's Interrupt List
- ↑ «Time Utilities Reference». iOS Developer Library. 2007
- ↑ «Time Utilities Reference». Mac OS X Developer Library. 2007
- ↑ a b «Time Utilities - Foundation». Apple Developer Documentation. Consultado em 6 de junho de 2022
- ↑ Ruth E. Goldenberg; Lawrence J. Kenah; Denise E. Dumas (1991). VAX/VMS Internals and Data Structures, Version 5.2. [S.l.]: Digital Press. ISBN 978-1555580599
- ↑ «Why is Wednesday, November 17, 1858 the base time for OpenVMS (VAX VMS)?». Stanford University. 24 de julho de 1997. Consultado em 8 de janeiro de 2020. Arquivado do original em 24 de julho de 1997
- ↑ a b «VSI C Run-Time Library Reference Manual for OpenVMS Systems» (PDF). VSI. Novembro de 2020. Consultado em 17 de abril de 2021
- ↑ «OpenVMS and the year 2038». HP. Consultado em 17 de abril de 2021
- ↑ a b z/Architecture Principles of Operation (PDF). Poughkeepsie, New York: International Business Machines. 2007
- ↑ «Expanded 64-bit time values». IBM. Consultado em 18 de abril de 2021
- ↑ Jonathan de Boyne Pollard. «The 32-bit Command Interpreter»
- ↑ a b c «DateTime.Now Property». Microsoft Docs
- ↑ a b c «DateTime.UtcNow Property». Microsoft Docs
- ↑ a b c «DateTime.Ticks Property». Microsoft Docs
- ↑ «Date and Time Support». Embarcadero Developer Network. 2013
- ↑ «System.SysUtils.Time». Embarcadero Developer Network. 2013
- ↑ «System.SysUtils.GetTime». Embarcadero Developer Network. 2013
- ↑ «System.SysUtils.Date». Embarcadero Developer Network'. 2013
- ↑ «System.DateUtils.Today». Embarcadero Developer Network. 2013
- ↑ «System.DateUtils.Tomorrow». Embarcadero Developer Network. 2013
- ↑ «System.DateUtils.Yesterday». Embarcadero Developer Network. 2013
- ↑ «System.SysUtils.Now». Embarcadero Developer Network. 2013
- ↑ «System.SysUtils.DayOfWeek». Embarcadero Developer Network. 2013
- ↑ «System.SysUtils.CurrentYear». Embarcadero Developer Network. 2013
- ↑ a b c «Time and Time Correction in Erlang». www.erlang.org
- ↑ «XL2000: Early Dates on Office Spreadsheet Component Differ from Excel». Microsoft Support. 2003. Cópia arquivada em 24 de outubro de 2007
- ↑ «SYSTEM_CLOCK». Intel Fortran Compiler 19.0 Developer Guide and Reference. 29 de abril de 2019. Consultado em 23 de junho de 2019
- ↑ «SYSTEM_CLOCK — Time function». The GNU Fortran Compiler. Consultado em 27 de outubro de 2011
- ↑ a b «System.nanoTime() method». Java Platform, Standard Edition 6: API Specification. 2015. Consultado em 23 de junho de 2019
- ↑ «Clock.systemUTC() and other methods». Java Platform, Standard Edition 8: API Specification. 2014. Consultado em 15 de janeiro de 2015
- ↑ «JSR-310 Java Time System». Java Platform, Standard Edition 8: API Specification. 2014. Consultado em 15 de janeiro de 2015
- ↑ «Matlab Help»
- ↑ a b «NSTimeInterval - Foundation». Apple Developer Documentation
- ↑ Douglas Wegscheild, R. Schertler, and Jarkko Hietaniemi, «Time::HiRes». CPAN - Comprehensive Perl Archive Network. 2011. Consultado em 27 de outubro de 2011
- ↑ James Britt; Neurogami. «Time class». Ruby-Doc.org: Help and documentation for the Ruby programming language. Scottsdale, AZ. Consultado em 27 de outubro de 2011
- ↑ Yugui (18 de agosto de 2010). «Ruby 1.9.2 is released»
- ↑ «Using the Get-Date Cmdlet». Microsoft Docs. Consultado em 23 de junho de 2019
- ↑ «Windows PowerShell Tip of the Week – Formatting Dates and Times». Microsoft Docs. Consultado em 23 de junho de 2019
Ligações externas
[editar | editar código-fonte]- Critical and Significant Dates, J. R. Stockton (acessado em 3 de dezembro de 2015)
- The Boost Date/Time Library (C++)
- The Boost Chrono Library (C++)
- The Chronos Date/Time Library (Smalltalk)
- Joda Time, The Joda Date/Time Library (Java)
- The Perl DateTime Project (Perl)
- date: Ruby Standard Library Documentation (Ruby)
Erro de citação: Existem etiquetas <ref>
para um grupo chamado "note", mas não foi encontrada nenhuma etiqueta <references group="note"/>
correspondente