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

editar

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

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

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

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
Sistema operacional Comando ou função Resolução Era ou faixa
Android java.lang.System.currentTimeMillis() 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

C:\>TIME
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
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]

[34]

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

Notas e referências

Notas

Referências

  1. Ralf D. Brown (2000). «Int 0x1A, AH=0x00». Ralf Brown's Interrupt List 
  2. Ralf D. Brown (2000). «Int 0x1A, AH=0x02». Ralf Brown's Interrupt List 
  3. Ralf D. Brown (2000). «Int 0x1A, AH=0x04». Ralf Brown's Interrupt List 
  4. «CP/M Plus (CP/M Version 3.0) Operating System Guide» (PDF) 
  5. «BDOS system calls» 
  6. Ralf D. Brown (2000). «Int 0x21, AH=0x2c». Ralf Brown's Interrupt List 
  7. Ralf D. Brown (2000). «Int 0x21, AH=0x2a». Ralf Brown's Interrupt List 
  8. «Time Utilities Reference». iOS Developer Library. 2007 
  9. «Time Utilities Reference». Mac OS X Developer Library. 2007 
  10. a b «Time Utilities - Foundation». Apple Developer Documentation. Consultado em 6 de junho de 2022 
  11. 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 
  12. «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 
  13. a b «VSI C Run-Time Library Reference Manual for OpenVMS Systems» (PDF). VSI. Novembro de 2020. Consultado em 17 de abril de 2021 
  14. «OpenVMS and the year 2038». HP. Consultado em 17 de abril de 2021 
  15. a b z/Architecture Principles of Operation (PDF). Poughkeepsie, New York: International Business Machines. 2007 
  16. «Expanded 64-bit time values». IBM. Consultado em 18 de abril de 2021 
  17. Jonathan de Boyne Pollard. «The 32-bit Command Interpreter» 
  18. a b c «DateTime.Now Property». Microsoft Docs 
  19. a b c «DateTime.UtcNow Property». Microsoft Docs 
  20. a b c «DateTime.Ticks Property». Microsoft Docs 
  21. «Date and Time Support». Embarcadero Developer Network. 2013 
  22. «System.SysUtils.Time». Embarcadero Developer Network. 2013 
  23. «System.SysUtils.GetTime». Embarcadero Developer Network. 2013 
  24. «System.SysUtils.Date». Embarcadero Developer Network'. 2013 
  25. «System.DateUtils.Today». Embarcadero Developer Network. 2013 
  26. «System.DateUtils.Tomorrow». Embarcadero Developer Network. 2013 
  27. «System.DateUtils.Yesterday». Embarcadero Developer Network. 2013 
  28. «System.SysUtils.Now». Embarcadero Developer Network. 2013 
  29. «System.SysUtils.DayOfWeek». Embarcadero Developer Network. 2013 
  30. «System.SysUtils.CurrentYear». Embarcadero Developer Network. 2013 
  31. a b c «Time and Time Correction in Erlang». www.erlang.org 
  32. «XL2000: Early Dates on Office Spreadsheet Component Differ from Excel». Microsoft Support. 2003. Cópia arquivada em 24 de outubro de 2007 
  33. «SYSTEM_CLOCK». Intel Fortran Compiler 19.0 Developer Guide and Reference. 29 de abril de 2019. Consultado em 23 de junho de 2019 
  34. «SYSTEM_CLOCK — Time function». The GNU Fortran Compiler. Consultado em 27 de outubro de 2011 
  35. a b «System.nanoTime() method». Java Platform, Standard Edition 6: API Specification. 2015. Consultado em 23 de junho de 2019 
  36. «Clock.systemUTC() and other methods». Java Platform, Standard Edition 8: API Specification. 2014. Consultado em 15 de janeiro de 2015 
  37. «JSR-310 Java Time System». Java Platform, Standard Edition 8: API Specification. 2014. Consultado em 15 de janeiro de 2015 
  38. «Matlab Help» 
  39. a b «NSTimeInterval - Foundation». Apple Developer Documentation 
  40. Douglas Wegscheild, R. Schertler, and Jarkko Hietaniemi, «Time::HiRes». CPAN - Comprehensive Perl Archive Network. 2011. Consultado em 27 de outubro de 2011 
  41. 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 
  42. Yugui (18 de agosto de 2010). «Ruby 1.9.2 is released» 
  43. «Using the Get-Date Cmdlet». Microsoft Docs. Consultado em 23 de junho de 2019 
  44. «Windows PowerShell Tip of the Week – Formatting Dates and Times». Microsoft Docs. Consultado em 23 de junho de 2019 

Ligações externas

editar


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