Hora do sistema

 

Comando date do Unix

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

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

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

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

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

Sistema operacionalComando ou funçãoResoluçãoEra ou faixa
Androidjava.lang.System.currentTimeMillis()1 ms1 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 sMeia-noite do dia atual
INT 1Ah, AH=04h[3]1 dia1 de janeiro de 1980 ou 31 de dezembro de 1999 (depende do sistema)
CP/M PlusSystem 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 s31 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

C:\>TIME
10 ms1 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 ms1 de janeiro de 2001 ±10.000 anos
macOSCFAbsoluteTimeGetCurrent()[9]< 1 ms[10][note 1]1 de janeiro de 2001 ±10.000 anos[10][note 1]
OpenVMSSYS$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/OSSTCK[15]:7–1872−12 μs

244,14 ps[15]:4-45, 4-46
1 de janeiro de 1900 até 17 de setembro de 2042 UTC
STCKE1 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/2DosGetDateTime()10 ms1 de janeiro de 1980 até 31 de dezembro de 2079[17]
WindowsGetSystemTime()1 ms1 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

Linguagem/AplicaçãoFunção ou variávelResoluçãoEra ou faixa
AdaAda.Calendar.Clock100 μs até

20 ms (*)
1 de janeiro de 1901 até 31 de dezembro 2099 (*)
AWKsystime()1 s(*)
BASIC, True BASICDATE, DATE$

TIME, TIME$
1 s(*)
Business BASICDAY, TIM0.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
CICSASKTIME1 ms1 de janeiro de 1900
COBOLFUNCTION CURRENT-DATE1 s1 de janeiro de 1601
Common Lisp(get-universal-time)1 s1 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 ms0/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 s0/0/0000 0:0:0:000 até 31/12/9999, às 23:59:59:000 [sic]
System.SysUtils.DayOfWeek[29]1 day1 à 7
System.SysUtils.CurrentYear[30]1 year(*)
Emacs Lisp(current-time)1 μs (*)1 de janeiro de 1970
Erlangerlang:system_time(), os:system_time()[31]Depende do SO, Linux, por exemplo: 1ns[31]1 de janeiro de 1970[31]
Exceldate()?0 de janeiro de 1900[32]
FortranDATE_AND_TIME

SYSTEM_CLOCK
(*)[33]

[34]

1 de janeiro de 1970
CPU_TIME1 μs
Gotime.Now()1 ns1 de janeiro de 0001
HaskellTime.getClockTime1 ps (*)1 de janeiro de 1970 (*)
Data.Time.getCurrentTime1 ps (*)17 de novembro de 1858 (*)
Javajava.util.Date()

System.currentTimeMillis()
1 ms1 de janeiro de 1970
System.nanoTime()[35]1 nsarbitrário[35]
Clock.systemUTC()[36]1 nsarbitrário[37]
JavaScript, TypeScript(new Date()).getTime()

Date.now()
1 ms1 de janeiro de 1970
Matlabnow1 s0 de janeiro de 0000[38]
MUMPS$H (abreviação de $HOROLOG)1 s31 de dezembro de 1840
LabVIEWTick Count1 ms00:00:00.000 1 de janeiro de 1904
Get Date/Time in Seconds1 ms00:00:00.000 1 de janeiro de 1904
Objective-C[NSDate timeIntervalSinceReferenceDate]< 1 ms[39]1 de janeiro de 2001 ±10.000 anos[39]
OCamlUnix.time()1 s1 de janeiro de 1970
Unix.gettimeofday()1 μs
Extended PascalGetTimeStamp()1 s(*)
Turbo PascalGetTime()

GetDate()
10 ms(*)
Perltime()1 s1 de janeiro de 1970
Time::HiRes::time[40]1 μs
PHPtime()

mktime()
1 s1 de janeiro de 1970
microtime()1 μs
PureBasicDate()1 s1 de janeiro de 1970 até 19 de janeiro de 2038
Pythondatetime.now().timestamp()1 μs (*)1 de janeiro de 1970
RPGCURRENT(DATE), %DATE

CURRENT(TIME), %TIME
1 s1 de janeiro de 0001 até 31 de dezembro de 9999
CURRENT(TIMESTAMP), %TIMESTAMP1 μs
RubyTime.now()[41]1 μs (*)1 de janeiro de 1970 (até 19 de janeiro de 2038 antes do Ruby 1.9.2[42])
SmalltalkTime microsecondClock

(VisualWorks)
1 s (ANSI)

1 μs (VisualWorks)

1 s (Squeak)
1 de janeiro de 1901 (*)
Time totalSeconds

(Squeak)
SystemClock ticksNowSinceSystemClockEpoch

(Chronos)
SQLCURDATE() or CURRENT DATE

CURTIME() or CURRENT TIME

GETDATE()

NOW() or CURRENT TIMESTAMP

SYSDATE()
3 ms1 de janeiro de 1753 até 31 de dezembro de 9999 (*)
60 s1 de janeiro de 1900 até 6 de junho de 2079
Standard MLTime.now()1 μs (*)1 de janeiro de 1970 (*)
TCL[clock seconds]1 s1 de janeiro de1970
[clock milliseconds]1 ms
[clock microseconds]1 μs
[clock clicks]1 μs (*)(*)
Windows PowerShellGet-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 .NETSystem.DateTime.Now[18]

System.DateTime.UtcNow[19]
100 ns[20]1 de janeiro de 0001 até 31 de dezembro de 9999

Ver também

Notas e referências

Notas

Referências

Ligações externas


Erro de citação: Existem etiquetas <ref> para um grupo chamado "note", mas não foi encontrada nenhuma etiqueta <references group="note"/> correspondente