Hora del sistema

Representación del tiempo utilizado en las computadoras
Comando de fecha de Unix

En informática y programación , el tiempo del sistema representa la noción que tiene un sistema informático del paso del tiempo. En este sentido, el tiempo también incluye el paso de los días en el calendario .

El tiempo del sistema se mide mediante un reloj del sistema , que normalmente se implementa como un simple recuento del número de ticks que han transcurrido desde una fecha de inicio arbitraria, llamada época . Por ejemplo, los sistemas compatibles con Unix y POSIX codifican el tiempo del sistema (" tiempo Unix ") como el número de segundos transcurridos desde el inicio de la época Unix el 1 de enero de 1970 a las 00:00:00 UT , con excepción de los segundos intercalares . Los sistemas que implementan las versiones de 32 y 64 bits de la API de Windows , como Windows 9x y Windows NT , proporcionan el tiempo del sistema como SYSTEMTIME , representado como un valor de año/mes/día/hora/minuto/segundo/milisegundos, y FILETIME , representado como un recuento del número de ticks de 100 nanosegundos desde el 1 de enero de 1601 a las 00:00:00 UT según el calendario gregoriano proléptico .

La hora del sistema se puede convertir en hora del calendario , que es una forma más adecuada para la comprensión humana. Por ejemplo, la hora del sistema Unix 1 000 000 000 segundos desde el comienzo de la época se traduce en la hora del calendario 9 de septiembre de 2001 01:46:40 UT . Las subrutinas de biblioteca que manejan tales conversiones también pueden ocuparse de los ajustes de las zonas horarias , el horario de verano (DST), los segundos intercalares y la configuración regional del usuario . Por lo general, también se proporcionan rutinas de biblioteca que convierten las horas del calendario en horas del sistema.

Muchas implementaciones que actualmente almacenan las horas del sistema como valores enteros de 32 bits sufrirán el inminente problema del año 2038. Estos valores de tiempo se desbordarán ("se quedarán sin bits") después del final de su época de tiempo del sistema, lo que provocará errores de software y hardware . Estos sistemas requerirán algún tipo de solución, similar a los esfuerzos necesarios para resolver el problema anterior del año 2000. Este también será un problema potencialmente mucho mayor para los formatos de archivos de datos existentes que contienen marcas de tiempo del sistema almacenadas como valores de 32 bits.

Otras medidas de tiempo

El tiempo de proceso está estrechamente relacionado con el tiempo del sistema y es un recuento del tiempo total de CPU consumido por un proceso en ejecución . Se puede dividir en tiempo de CPU del usuario y del sistema , que representan el tiempo empleado en ejecutar el código del usuario y el código del núcleo del sistema , respectivamente. Los tiempos de proceso son un recuento de instrucciones de CPU o ciclos de reloj y, por lo general, no tienen una correlación directa con el tiempo de ejecución .

Los sistemas de archivos realizan un seguimiento de las horas en que se crean, modifican y/o acceden a los archivos almacenando marcas de tiempo en el bloque de control de archivos (o inodo ) de cada archivo y directorio .

Historia

La mayoría de las computadoras personales de primera generación no registraban fechas y horas. Entre ellas se encontraban los sistemas que ejecutaban el sistema operativo CP/M , así como los primeros modelos de Apple II , BBC Micro y Commodore PET , entre otros. Las placas periféricas complementarias que incluían chips de reloj de tiempo real con batería de respaldo incorporada estaban disponibles para IBM PC y XT , pero IBM AT fue la primera PC ampliamente disponible que venía equipada con hardware de fecha y hora integrado en la placa base . Antes de la disponibilidad generalizada de redes de computadoras , la mayoría de los sistemas de computadoras personales que registraban la hora del sistema lo hacían solo con respecto a la hora local y no tenían en cuenta las diferentes zonas horarias .

Con la tecnología actual, la mayoría de las computadoras modernas mantienen un registro de la hora civil local, al igual que muchos otros dispositivos domésticos y personales, como videograbadoras , grabadoras de video digitales , receptores de televisión por cable , PDA , buscapersonas , teléfonos celulares , máquinas de fax , contestadores telefónicos automáticos , cámaras , videocámaras , acondicionadores de aire centrales y hornos microondas .

Los microcontroladores que funcionan dentro de sistemas integrados (como Raspberry Pi , Arduino y otros sistemas similares ) no siempre tienen hardware interno para realizar un seguimiento del tiempo. Muchos de estos sistemas controladores funcionan sin conocimiento del tiempo externo. Aquellos que requieren dicha información normalmente inicializan su tiempo base al reiniciar obteniendo el tiempo actual de una fuente externa, como un servidor de tiempo o un reloj externo, o solicitando al usuario que ingrese manualmente el tiempo actual.

Implementación

El reloj del sistema se implementa normalmente como un temporizador de intervalos programable que interrumpe periódicamente la CPU, que luego comienza a ejecutar una rutina de servicio de interrupción del temporizador. Esta rutina normalmente agrega un tic al reloj del sistema (un contador simple) y maneja otras tareas de mantenimiento periódicas ( interrupción , etc.) antes de regresar a la tarea que la CPU estaba ejecutando antes de la interrupción.

Recuperando la hora del sistema

22 de octubre de 2024 21:46:13 UTC

La hora del sistema Wikipedia cuando se generó esta página por última vez.
Purgar esta página y actualizar este contador.

Las siguientes tablas ilustran métodos para recuperar la hora del sistema en varios sistemas operativos , lenguajes de programación y aplicaciones . Los valores marcados con (*) dependen del sistema y pueden diferir entre implementaciones. Todas las fechas se dan como fechas del calendario gregoriano o gregoriano proléptico .

La resolución de la medición del tiempo de una implementación no implica la misma precisión de dichas mediciones. Por ejemplo, un sistema podría devolver la hora actual como un valor medido en microsegundos, pero en realidad podría ser capaz de discernir ticks de reloj individuales con una frecuencia de solo 100 Hz (10 ms).

Sistemas operativos

Sistema operativoComando o funciónResoluciónÉpoca o rango
Androidejava.lang.System.currentTimeMillis()1 ms1 de enero de 1970
BIOS ( PC IBM )INT 1Ah, AH=00h[1]54,9254 ms
18,2065 Hz
Medianoche del día actual
INT 1Ah, AH=02h[2]1 segundoMedianoche del día actual
INT 1Ah, AH=04h[3]1 día1 de enero de 1980 al 31 de diciembre de 1999 o 31 de diciembre de 2079 (según el sistema)
CP/M+ PlusBloque de control del sistema: [4]
scb$base+58h , Días desde el 31 de diciembre de 1977
scb$base+5Ah, Hora (BCD)
scb$base+5Bh, Minuto (BCD)
scb$base+5Ch, Segundo (BCD)
1 segundo31 de diciembre de 1977 al 5 de junio de 2157
Función BDOS 69h> ( T_GET): [5]
word , Días desde el 1 de enero de 1978
byte, Hora (BCD)
byte, Minuto (BCD)
byte, Segundo (BCD)
DOS ( Microsoft )C:\> DATE
C:\> TIME
10 ms1 de enero de 1980 al 31 de diciembre de 2099
INT 21h, AH=2Ch SYSTEM TIME[6]
INT 21h, AH=2Ah SYSTEM DATE[7]
iOS ( Apple )CFAbsoluteTimeGetCurrent()[8]< 1 ms1 de enero de 2001 ±10.000 años
macOSCFAbsoluteTimeGetCurrent()[9]< 1 ms [10] [nota 1]1 de enero de 2001 ±10.000 años [10] [nota 1]
OpenVMSSYS$GETTIM()100 ns [11]17 de noviembre de 1858 al 31 de julio 31.086 [12]
gettimeofday()1 μs [13]1 de enero de 1970 al 7 de febrero de 2106 [14]
clock_gettime()1 ns [13]
Sistema operativo zSTCK[15] : 7–187 2 −12 μs
244,14 ps [15] : 4–45, 4–46 
1 de enero de 1900 al 17 de septiembre de 2042 UT [16]
STCKE1 de enero de 1900 a 36.765 d. C. [17]
Unix , POSIX
(ver también funciones de fecha y hora de C )
$date
time()
1 segundo(*)
1 de enero de 1970 (hasta el 19 de enero de 2038 antes de Linux 5.9) hasta el 2 de julio de 2486 (desde Linux 5.10)
1 de enero de 1970 hasta el 4 de diciembre de 292.277.026.596 d. C.
gettimeofday()1 microsegundo
clock_gettime()1 ns
Sistema operativo/2DosGetDateTime()10 ms1 de enero de 1980 al 31 de diciembre de 2079 [18]
VentanasGetSystemTime()1 ms1 de enero de 1601 al 14 de septiembre de 30828, 02:48:05.4775807
GetSystemTimeAsFileTime()100 ns
GetSystemTimePreciseAsFileTime()

Lenguajes de programación y aplicaciones

Idioma/AplicaciónFunción o variableResoluciónÉpoca o rango
AdaAda.Calendar.Clock100 μs a
20 ms (*)
1 de enero de 1901 al 31 de diciembre de 2099 (*)
AWKsystime()1 segundo(*)
BÁSICO , BÁSICO verdaderoDATE, DATE$
TIME,TIME$
1 segundo(*)
BÁSICO de negociosDAY,TIM0,1 segundos(*)
C (ver funciones de fecha y hora C )time()1 s (*) [nota 2](*) [nota 2]
C++std::time()
std::chrono::system_clock::now()
1 s (*) [nota 2]
1 ns (C++11, depende del sistema operativo)
(*) [nota 2]
DO#System.DateTime.Now[19]
System.DateTime.UtcNow[20]
100 ns [21]1 de enero de 0001 al 31 de diciembre de 9999
CICSASKTIME1 ms1 de enero de 1900
COBOLFUNCTION CURRENT-DATE1 segundo1 de enero de 1601
Ceceo común(get-universal-time)1 segundo1 de enero de 1900
Delfos ( Borland )date
time
1 ms
(punto flotante)
1 de enero de 1900
Delphi
( Tecnologías Embarcadero ) [22]
System.SysUtils.Time[23]1 ms0/0/0000 0:0:0:000 al
31/12/9999 23:59:59:999 [sic]
System.SysUtils.GetTime[24] (alias para System.SysUtils.Time)
System.SysUtils.Date[25]0/0/0000 0:0:0:000 al
31/12/9999 0:0:0:000 [sic]
System.DateUtils.Today[26]
System.DateUtils.Tomorrow[27]
System.DateUtils.Yesterday[28]
System.SysUtils.Now[29]1 segundo0/0/0000 0:0:0:000 al
31/12/9999 23:59:59:000 [sic]
System.SysUtils.DayOfWeek[30]1 día1 a 7
System.SysUtils.CurrentYear[31]1 año(*)
Emacs Lisp(current-time)1 μs (*)1 de enero de 1970
Erlangerlang:tiempo_sistema(), os:tiempo_sistema() [32]Depende del sistema operativo , por ejemplo, Linux 1ns [32]1 de enero de 1970 [32]
Sobresalirdate()?0 de enero de 1900 [33]
FortranDATE_AND_TIME
SYSTEM_CLOCK
(*) [34]

[35]

1 de enero de 1970
CPU_TIME1 microsegundo
Irtime.Now()1 ns1 de enero de 0001
HaskellTime.getClockTime1 ps (*)1 de enero de 1970 (*)
Data.Time.getCurrentTime1 ps (*)17 de noviembre de 1858 (*)
Javajava.util.Date()
System.currentTimeMillis()
1 ms1 de enero de 1970
System.nanoTime()[36]1 nsarbitrario [36]
Clock.systemUTC()[37]1 nsarbitrario [38]
JavaScript , Tipografía(new Date()).getTime()
Date.now()
1 ms1 de enero de 1970
Matlabnow1 segundo0 de enero de 0000 [39]
PAPERAS$H( abreviatura de $HOROLOG )1 segundo31 de diciembre de 1840
LabVIEWTick Count1 ms00:00:00.000 1 de enero de 1904
Get Date/Time in Seconds1 ms00:00:00.000 1 de enero de 1904
Objetivo-C[NSDate timeIntervalSinceReferenceDate]< 1 ms [40]1 de enero de 2001 ±10.000 años [40]
OCamlUnix.time()1 segundo1 de enero de 1970
Unix.gettimeofday()1 microsegundo
Pascal extendidoGetTimeStamp()1 segundo(*)
Turbo PascalGetTime()
GetDate()
10 ms(*)
Perltime()1 segundo1 de enero de 1970
Time::HiRes::time[41]1 microsegundo
PHPtime()
mktime()
1 segundo1 de enero de 1970
microtime()1 microsegundo
Puro BásicoDate()1 segundo1 de enero de 1970 al 19 de enero de 2038
Pitóndatetime.now().timestamp()1 μs (*)1 de enero de 1970
Juego de rolCURRENT(DATE), %DATE
CURRENT(TIME),%TIME
1 segundo1 de enero de 0001 al 31 de diciembre de 9999
CURRENT(TIMESTAMP),%TIMESTAMP1 microsegundo
RubíTime.now()[42]1 μs (*)1 de enero de 1970
(hasta el 19 de enero de 2038 antes de Ruby 1.9.2 [43] )
Esquema(get-universal-time)[44]1 segundo1 de enero de 1900
Charla informalTime microsecondClock
(VisualWorks)
1 s (ANSI)
1 μs (VisualWorks)
1 s (Chirrido)
1 de enero de 1901 (*)
Time totalSeconds
(Chirrido)
SystemClock ticksNowSinceSystemClockEpoch
(Cronos)
SQLCURDATE()o CURRENT DATE
CURTIME()o o CURRENT TIME
GETDATE()oGETUTCDATE()
NOW()CURRENT TIMESTAMP
SYSDATE()
3 ms1 de enero de 1753 al 31 de diciembre de 9999 (*)
60 segundos1 de enero de 1900 al 6 de junio de 2079
ML estándarTime.now()1 μs (*)1 de enero de 1970 (*)
TCL[clock seconds]1 segundo1 de enero de 1970
[clock milliseconds]1 ms
[clock microseconds]1 microsegundo
[clock clicks]1 μs (*)(*)
Windows PowerShellGet-Date[45] [46]100 ns [21]1 de enero de 0001 al 31 de diciembre de 9999
[DateTime]::Now[19]
[DateTime]::UtcNow[20]
Visual Basic .NETSystem.DateTime.Now[19]
System.DateTime.UtcNow[20]
100 ns [21]1 de enero de 0001 al 31 de diciembre de 9999

Véase también

Notas

  1. ^ ab La documentación para desarrolladores de Apple no es clara en cuanto a la precisión y el rango de CFAbsoluteTime/CFTimeInterval, excepto en la documentación de CFRunLoopTimerCreate, que hace referencia a una precisión de "submilisegundos como máximo". Sin embargo, el tipo similar NSTimeInterval parece ser intercambiable y tiene la precisión y el rango indicados.
  2. ^ abcd La biblioteca estándar de C no especifica ninguna resolución, época, rango o tipo de datos específicos para los valores de hora del sistema . La biblioteca de C++ abarca la biblioteca de C, por lo que utiliza la misma implementación de hora del sistema que C.

Referencias

  1. ^ Ralf D. Brown (2000). "Int 0x1A, AH=0x00". Lista de interrupciones de Ralf Brown .
  2. ^ Ralf D. Brown (2000). "Int 0x1A, AH=0x02". Lista de interrupciones de Ralf Brown .
  3. ^ Ralf D. Brown (2000). "Int 0x1A, AH=0x04". Lista de interrupciones de Ralf Brown .
  4. ^ "Guía del sistema operativo CP/M Plus (CP/M versión 3.0)" (PDF) .
  5. ^ "Llamadas al sistema BDOS".
  6. ^ Ralf D. Brown (2000). "Int 0x21, AH=0x2c". Lista de interrupciones de Ralf Brown .
  7. ^ Ralf D. Brown (2000). "Int 0x21, AH=0x2a". Lista de interrupciones de Ralf Brown .
  8. ^ "Referencia de utilidades de tiempo". Biblioteca para desarrolladores de iOS . 2007.
  9. ^ "Referencia de utilidades de tiempo". Biblioteca para desarrolladores de Mac OS X. 2007.
  10. ^ ab "Time Utilities - Foundation". Documentación para desarrolladores de Apple . Consultado el 6 de julio de 2022 .
  11. ^ Ruth E. Goldenberg; Lawrence J. Kenah; Denise E. Dumas (1991). Componentes internos y estructuras de datos de VAX/VMS, versión 5.2. Prensa digital. ISBN 978-1555580599.
  12. ^ "¿Por qué el miércoles 17 de noviembre de 1858 es la hora base para OpenVMS (VAX VMS)?". Universidad de Stanford . 24 de julio de 1997. Archivado desde el original el 24 de julio de 1997. Consultado el 8 de enero de 2020 .
  13. ^ ab "Manual de referencia de la biblioteca de tiempo de ejecución de C de VSI para sistemas OpenVMS" (PDF) . VSI. Noviembre de 2020 . Consultado el 17 de abril de 2021 .
  14. ^ "OpenVMS y el año 2038". HP . Consultado el 17 de abril de 2021 .
  15. ^ ab z/Principios de funcionamiento de la arquitectura (PDF) . Poughkeepsie, Nueva York: International Business Machines. 2007.
  16. ^ IBM pretende ampliar el rango de fechas de los sistemas futuros más allá de 2042. z/Architecture Principles of Operation, (Poughkeepsie, Nueva York: International Business Machines, 2007) 1-15, 4-45 a 4-47.
  17. ^ "Valores de tiempo de 64 bits ampliados". IBM . Consultado el 18 de abril de 2021 .
  18. ^ Jonathan de Boyne Pollard. "El intérprete de comandos de 32 bits". En OS/2 Warp 4, la fecha y la hora pueden funcionar mucho más allá del año 2000, e incluso más allá del año 2038, y de hecho hasta el año 2079, que es el límite del reloj de tiempo real de OS/2 Warp 4.
  19. ^ abc "Propiedad DateTime.Now". Microsoft Docs .
  20. ^ abc "Propiedad DateTime.UtcNow". Microsoft Docs .
  21. ^ abc "Propiedad DateTime.Ticks". Microsoft Docs .
  22. ^ "Compatibilidad con fecha y hora". Red de desarrolladores de Embarcadero . 2013.
  23. ^ "System.SysUtils.Time". Red de desarrolladores de Embarcadero . 2013.
  24. ^ "System.SysUtils.GetTime". Red de desarrolladores de Embarcadero . 2013.
  25. ^ "System.SysUtils.Date". Red de desarrolladores de Embarcadero. 2013.
  26. ^ "System.DateUtils.Today". Red de desarrolladores de Embarcadero . 2013.
  27. ^ "System.DateUtils.Tomorrow". Red de desarrolladores de Embarcadero . 2013.
  28. ^ "System.DateUtils.Yesterday". Red de desarrolladores de Embarcadero . 2013.
  29. ^ "System.SysUtils.Now". Red de desarrolladores de Embarcadero . 2013.
  30. ^ "System.SysUtils.DayOfWeek". Red de desarrolladores de Embarcadero . 2013.
  31. ^ "System.SysUtils.CurrentYear". Red de desarrolladores de Embarcadero . 2013.
  32. ^ abc "Tiempo y corrección de tiempo en Erlang". www.erlang.org .
  33. ^ "XL2000: Las primeras fechas del componente de hoja de cálculo de Office difieren de las de Excel". Soporte técnico de Microsoft . 2003. Archivado desde el original el 24 de octubre de 2007. En el componente de hoja de cálculo de Microsoft Office, el valor 0 se evalúa como la fecha 30 de diciembre de 1899 y el valor 1 como el 31 de diciembre de 1899. ... En Excel, el valor 0 se evalúa como el 0 de enero de 1900 y el valor 1 como el 1 de enero de 1900.
  34. ^ "SYSTEM_CLOCK". Guía y referencia para desarrolladores del compilador Intel Fortran 19.0 . 29 de abril de 2019. Consultado el 23 de julio de 2019 .
  35. ^ "SYSTEM_CLOCK — Función de tiempo". El compilador GNU Fortran . Consultado el 27 de octubre de 2011 .
  36. ^ ab "Método System.nanoTime()". Java Platform, Standard Edition 6: API Specification . 2015 . Consultado el 23 de julio de 2019 .
  37. ^ "Clock.systemUTC() y otros métodos". Java Platform, Standard Edition 8: API Specification . 2014 . Consultado el 15 de enero de 2015 .
  38. ^ "JSR-310 Java Time System". Plataforma Java, edición estándar 8: especificación de API . 2014. Consultado el 15 de enero de 2015 .
  39. ^ "Ayuda de Matlab".
  40. ^ ab "NSTimeInterval - Foundation". Documentación para desarrolladores de Apple .
  41. ^ Douglas Wegscheild, R. Schertler y Jarkko Hietaniemi, "Tiempo :: HiRes". CPAN: red integral de archivos Perl . 2011 . Consultado el 27 de octubre de 2011 .
  42. ^ James Britt; Neurogami. "Clase de tiempo". Ruby-Doc.org: Ayuda y documentación para el lenguaje de programación Ruby . Scottsdale, AZ . Consultado el 27 de octubre de 2011 .
  43. ^ Yugui (18 de agosto de 2010). "Se lanza Ruby 1.9.2". La nueva versión 1.9.2 es casi compatible con la 1.9.1, excepto por estos cambios: ... Se ha reimplementado el tiempo. Se ha corregido el error con el año 2038.
  44. ^ "MIT/GNU Scheme 9.2: 15.5 Fecha y hora".
  45. ^ "Uso del cmdlet Get-Date". Microsoft Docs . 22 de octubre de 2009 . Consultado el 23 de julio de 2019 .
  46. ^ "Consejo de la semana de Windows PowerShell: dar formato a fechas y horas". Microsoft Docs . 26 de mayo de 2010 . Consultado el 23 de julio de 2019 .
  • Fechas críticas y significativas , JR Stockton (consultado el 3 de diciembre de 2015)
  • La biblioteca de fecha y hora Boost (C++)
  • La biblioteca Boost Chrono (C++)
  • La biblioteca de fecha y hora de Chronos (Smalltalk)
  • Joda Time , la biblioteca de fecha y hora de Joda (Java)
  • El proyecto DateTime de Perl Archivado el 19 de febrero de 2009 en Wayback Machine (Perl)
  • fecha: Documentación de la biblioteca estándar de Ruby (Ruby)
Obtenido de "https://es.wikipedia.org/w/index.php?title=Hora_del_sistema&oldid=1248652801"