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
editarTambé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
editarA 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
editarO 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
editarAs 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
editarSistema 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
editarLinguagem/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
editarNotas 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- 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