Época (informática)

fecha y hora a partir de la cual un ordenador mide la hora del sistema

Una época informática, llamada simplemente época, es una fecha y hora fijas utilizadas como referencia a partir de la cual un ordenador mide la hora del sistema.

La mayoría de los sistemas informáticos determinan el tiempo como un número que representa los segundos transcurridos desde una fecha y hora arbitrarias concretas. Por ejemplo, Unix y POSIX miden el tiempo como el número de segundos que han pasado desde el jueves 1 de enero de 1970 00:00:00 UT (Universal Time o "Tiempo universal"), un punto en el tiempo conocido como la Tiempo Unix. Los sistemas Windows NT (Windows New Technology) hasta Windows 11 e incluso Windows Server 2022, miden el tiempo como el número de intervalos de 100 nanosegundos que han transcurrido desde el 1 de enero de 1601 00:00:00 UTC (Coordinated Universal Time o "Tiempo universal coordinado"), lo que hace que ese punto en el tiempo sea la época para esos sistemas.[1]​ Las épocas informáticas casi siempre se especifican como la medianoche de la hora universal en alguna fecha en particular.

Resolución y representación

editar

Los sistemas de cronometraje por software varían ampliamente en la resolución de la medición del tiempo; algunos sistemas pueden utilizar unidades de tiempo tan grandes como un día, mientras que otros pueden utilizar nanosegundos. Por ejemplo, para una fecha de época de medianoche UTC (00:00) del 1 de enero de 1900, y una unidad de tiempo de un segundo, el tiempo de la medianoche (24:00) entre el 1 de enero de 1900 y el 2 de enero de 1900 se representa por el número 86400, que corresponde al número de segundos de un día. Cuando hay que representar tiempos anteriores a la época, es habitual utilizar el mismo sistema, pero con números negativos.

Esta representación de la hora es principalmente para uso interno. En los sistemas en los que la fecha y la hora son importantes en el sentido humano, el software casi siempre convertirá este número interno en una fecha y hora que representen un calendario humano.

Problemas

editar

Los ordenadores no suelen almacenar números arbitrariamente grandes. En cambio, a cada número almacenado por un ordenador se le asigna una cantidad fija de espacio. Por lo tanto, cuando el número de unidades de tiempo que han transcurrido desde la época de un sistema excede el número más grande que puede caber en el espacio asignado a la representación del tiempo, la representación del tiempo se desborda y pueden producirse problemas. Aunque el comportamiento de un sistema después de que se produzca el desbordamiento no es necesariamente predecible, en la mayoría de los sistemas el número que representa el tiempo se restablecerá a cero, y el sistema informático pensará que el tiempo actual es de nuevo el tiempo de época.

Los sistemas más antiguos, que contaban el tiempo como el número de años transcurridos desde el 1 de enero de 1900 y que sólo disponían de espacio suficiente para almacenar los números del 0 al 99, sufrieron el problema del año 2000. Estos sistemas (si no se corregían de antemano) interpretaban la fecha del 1 de enero de 2000 como la del 1 de enero de 1900, lo que provocaba errores impredecibles a principios del año 2000.

Incluso los sistemas que asignan más almacenamiento a la representación del tiempo no son inmunes a este tipo de error. Muchos sistemas operativos tipo Unix que mantienen el tiempo como segundos transcurridos desde la fecha de inicio del 1 de enero de 1970, y asignan a la representación del tiempo almacenamiento suficiente para almacenar números tan grandes como 2 147 483 647, experimentarán un problema de desbordamiento el 19 de enero de 2038. Esto se conoce como el problema del año 2038.

En informática existen otros problemas más sutiles, como la contabilización de los segundos intercalares, que no se observan con previsibilidad ni regularidad. Además, las aplicaciones que necesitan representar fechas y horas históricas (por ejemplo, representar una fecha anterior al cambio del calendario juliano al gregoriano) deben utilizar bibliotecas especializadas en cronometraje.

Por último, algunos programas deben mantener la compatibilidad con otros más antiguos que no respetan estrictamente los sistemas tradicionales de cronometraje. Por ejemplo, Microsoft Excel aplica la fecha ficticia del 29 de febrero de 1900 para mantener la compatibilidad con versiones antiguas de Lotus 1-2-3.[2]​ Lotus 1-2-3 aplicaba la fecha por error; cuando se descubrió el error, ya era demasiado tarde para corregirlo: "un cambio ahora alteraría las fórmulas que se escribieron para adaptarse a esta anomalía".[3]

En los sistemas horarios por satélite

editar

Existen al menos seis sistemas de navegación por satélite, todos los cuales funcionan transmitiendo señales horarias. De los dos únicos sistemas por satélite con cobertura mundial, el GPS (Global Positioning System y en español Sistema de Posicionamiento Global) calcula su señal horaria a partir de una época, mientras que GLONASS (del ruso Global'naya Navigatsionnaya Sputnikovaya Sistema, en inglés Global Navigation Satellite System) calcula la hora como un desfase respecto a UTC, con la entrada de UTC ajustada para los segundos intercalares. De los otros dos únicos sistemas que pretenden tener cobertura mundial, Galileo calcula a partir de una época y Beidou calcula a partir de UTC sin ajuste por segundos intercalares.[4]​ El GPS también transmite el desfase entre la hora UTC y la hora GPS y debe actualizar este desfase cada vez que hay un segundo intercalar, lo que requiere que los dispositivos receptores GPS gestionen la actualización correctamente. En cambio, los segundos intercalares son transparentes para los usuarios de GLONASS. La Agencia Espacial Europea explica las complejidades del cálculo de UTC a partir de una época en la documentación de Galileo, en el apartado "Ecuaciones para corregir la escala de tiempo del sistema a la escala de tiempo de referencia".[5]

Épocas destacadas de la informática

editar

La siguiente tabla enumera las fechas de las épocas utilizadas por programas informáticos populares y otros sistemas relacionados con la informática. En estos sistemas, el tiempo se almacena como la cantidad de una unidad de tiempo concreta (días, segundos, nanosegundos, etc.) que ha transcurrido desde una hora determinada (normalmente la medianoche UTC del principio de la fecha dada).

Fecha de la época Usos notables Justificación de la selección
0 de enero

1 a. C.[nota 1]

MATLAB[6] Año 0" en ISO 8601
1 de enero

1 d. C.[nota 1]

Microsoft .NET,[7][8]Go,[9]REXX,[10]Rata Die[11] Era común, ISO 2014,[12]​ RFC 3339[13]
14 de octubre de 1582 SPSS,[14]​ IBM z/OS Entorno Lingüístico,[15]IBM AIX COBOL[16] Igual que abajo, pero con indexación basada en uno
15 de octubre de 1582 UUID versión 1 (siglas en inglés para Universally Unique Identifier) Fecha de la reforma gregoriana del calendario cristiano[17]
1 de enero de 1601 NTFS, COBOL,[18]Win32/Win64 (época NT)[19][20] 1601 era el primer año del ciclo de 400 años del calendario gregoriano en la época en que se creó Windows NT[19]
31 de diciembre de 1840 Lenguaje de programación MUMPS 1841 era un año no bisiesto, varios años antes del año de nacimiento del ciudadano estadounidense vivo de más edad cuando se diseñó el idioma[21]
17 de noviembre de 1858 VMS, Observatorio Naval de los Estados Unidos, DVB (siglas en inglés para Digital Video Broadcasting) SI sellos de día de 16 bits, otros cálculos relacionados con la astronomía[22] 17 de noviembre de 1858, 00:00:00 UT es el cero del Día Juliano Modificado (DJM) equivalente al día juliano 2400000.5[23]
30 de diciembre de 1899 Microsoft COM DATE, Object Pascal, LibreOffice Calc, Google Sheets[24] Valor técnico interno utilizado por Microsoft Excel; para compatibilidad con Lotus 1-2-3.[2]
31 de diciembre de 1899 Dyalog APL,[25]Microsoft C/C++ 7.0[26] Elegido de forma que (fecha modificada por 7) produzca 0=domingo, 1=lunes, 2=martes, 3=miércoles, 4=jueves, 5=viernes y 6=sábado. La última versión de Microsoft de C/C++ no visual utilizaba esto, pero fue revertido posteriormente
0 de enero de 1900 Microsoft Excel,[2]Lotus 1-2-3[27] Aunque lógicamente el 0 de enero de 1900 equivale al 31 de diciembre de 1899, estos sistemas no permiten a los usuarios especificar esta última fecha. Dado que 1900 se trata incorrectamente como un año bisiesto en estos sistemas, el 0 de enero de 1900 corresponde en realidad a la fecha histórica del 30 de diciembre de 1899
1 de enero de 1900 Network Time Protocol, IBM CICS, Mathematica, RISC OS, VME, Common Lisp, Michigan Terminal System
1 de enero de 1901 Ada[28] En la primera versión del lenguaje, las fechas se limitaban al intervalo de 1901 a 2099 para evitar los años afectados por la regla de los 400 años bisiestos. Cuando el límite superior se amplió en versiones posteriores, el inferior se dejó igual para mantener la compatibilidad con los sistemas que lo utilizaban como dato[28]
1 de enero de 1904 LabVIEW, Mac OS Classic de Apple Inc., Lenguaje de programación JMP, Palm OS, MP4, Microsoft Excel (opcionalmente), IGOR Pro[29] 1904 es el primer año bisiesto del siglo XX[30]
1 de enero de 1960 Sistema SAS[31]
31 de diciembre de 1967 Pick OS y variantes (jBASE, Universe, Unidata, Revelation, Reality) Elegido de forma que (fecha mod 7) produzca 0=domingo, 1=lunes, 2=martes, 3=miércoles, 4=jueves, 5=viernes y 6=sábado[32]
1 de enero de 1970 Tiempo Unix utilizada en el tiempo POSIX, utilizada por Unix y Unix-like sistemas (Linux, macOS, Android), y lenguajes de programación: la mayoría de las implementaciones de C/C++,[33]Java, JavaScript, Perl, PHP, Python, Ruby, Tcl, ActionScript. También lo utiliza el Protocolo de tiempo de precisión
1 de enero de 1978 AmigaOS.[34][nota 2]​ Los sistemas de hardware Commodore Amiga se introdujeron entre 1985 y 1994. Última versión del SO 4.1 (diciembre de 2016). AROS, MorphOS
1 de enero de 1980 IBM BIOS INT 1Ah, DOS, OS/2, FAT12, FAT16, FAT32, sistemas de archivos exFAT, formato ZIP y derivados El PC IBM con su BIOS, así como 86-DOS, MS-DOS y PC DOS con su sistema de archivos FAT12 se desarrollaron e introdujeron entre 1980 y 1981
6 de enero de 1980 Qualcomm BREW, GPS, marcas de tiempo ATSC de 32 bits El GPS cuenta las semanas (una semana empieza el domingo) y el 6 de enero es el primer domingo de 1980[35][36]
31 de diciembre de 1989 Garmin FIT Epoch.[37]​ Estándar originado por Garmin como parte de su Protocolo FIT, que ha sido adoptado por muchos como estándar de facto en la industria de los dispositivos de fitness[38]
1 de enero de 2000 AppleSingle, AppleDouble,[39]PostgreSQL,[40][nota 3]Zigbee UTCTime,[41]​ helicóptero Ingenuity[42] Esta época del efecto 2000[43]​ se utiliza a veces para trasladar el problema de 2038 al año 2068, si el procesador no soporta 64 bits
1 de enero de 2001 NSDate en el marco Cocoa de Apple, NEXTSTEP Primer día del tercer milenio d. C.

Véase también

editar
  1. a b Calendario gregoriano proléptico.
  2. AmigaOS mide el tiempo en segundos y lo almacena en un entero de 32 bits con signo. Después del 19 de enero de 2046, 03:14:07 la fecha será negativa. La última versión del sistema operativo 4.1 (2016) no tiene solución para esto.
  3. Tenga en cuenta que la función Epoch devuelve el Epoch de unix SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '1970-01-01 00:00:00-00'); devuelve 0.

Referencias

editar
  1. «[MS-DTYP]: FILETIME». Microsoft Docs (en inglés). 30 de marzo de 2020. 
  2. a b c Spolsky, Joel (19 de febrero de 2008). «Why are the Microsoft Office file formats so complicated? (And some workarounds)» (en inglés). Consultado el 8 de marzo de 2009. 
  3. Dershowitz, Nachum; Reingold, Edward. Calendrical Calculations (en inglés) (3 edición). Cambridge University Press. pp. xxi-xxvi. ISBN 978-0-521-70238-6. 
  4. Subirana, J. Sanz (2011). «Time References in GNSS» (en inglés). 
  5. «GNSS Timescale Description Galileo». United Nations Office for Outer Space Affairs (en inglés) (5 edición). 2016. 
  6. «Datenum» (en inglés). Consultado el 7 de julio de 2015. 
  7. «GregorianCalendar Class» (en inglés). Consultado el 26 de abril de 2015. 
  8. «DateTimeOffset Structure» (en inglés). 2015. 
  9. «Package time» (en inglés). Consultado el 26 de abril de 2015. 
  10. «Date—z/OS TSO/E REXX Reference» (en inglés). 2014. 
  11. Dershowitz, Nachum; Reingold, Edward (2008). The Gregorian calendar (en inglés) (3 edición). Cambridge University Press. ISBN 978-0-521-70238-6. 
  12. Cowlishaw, Mike Frederic (1990). The Rexx Language: A Practical Approach to Programming (en inglés) (2 edición). Prentice Hall. pp. 93-177. ISBN 0-13-780651-5. 
  13. «Go 1 Release Notes—Major changes to the library—Time» (en inglés). 28 de marzo de 2012. Consultado el 26 de abril de 2015. 
  14. «Date and Time Formats» (en inglés). Consultado el 24 de enero de 2020. 
  15. «CEEDATM—Convert seconds to character timestamp» (en inglés). 22 de marzo de 2021. 
  16. «COBOL for AIX Programming Guide Version 5.1». IBM (en inglés) (1 edición). Junio de 2015. 
  17. Leach, P.; Mealling, M.; Salz, R. (Julio de 2005). «RFC 4122: Proposed Standard: A Universally Unique IDentifier (UUID) URN Namespace». Internet Engineering Task Force (en inglés). 
  18. «ISO/IEC 1989:2014 - Information technology — Programming languages, their environments and system software interfaces — Programming language COBOL.». ISO (en inglés): 634. 1 de junio de 2014. 
  19. a b Chen, Raymond (6 de marzo de 2009). «Why is the Win32 epoch January 1, 1601?» (en inglés). 
  20. «FILETIME structure (minwinbase.h)» (en inglés). 
  21. «"What happened in 1841?".» (en inglés). Archivado desde el original el 28 de agosto de 2015. 
  22. Winkler, Gernot M. R. «Modified Julian Date» (en inglés). Archivado desde el original el 14 de febrero de 2013. Consultado el 29 de enero de 2015. 
  23. «VMS base time origin» (en inglés). Archivado desde el original el 6 de junio de 2007. 
  24. «Introduction to the Google Sheets API» (en inglés). 
  25. «International Day Number» (en inglés). Consultado el 27 de noviembre de 2018. 
  26. «Time Management» (en inglés). 
  27. «What is story behind December 30, 1899 as base date?» (en inglés). 
  28. a b Barnes, John. «7.3 Times and dates» (en inglés). 
  29. «Dates And Times In Excel» (en inglés). 
  30. «MacTech – The journal of Apple technology» (en inglés). 
  31. Introduction to Dates and Times in SAS (en inglés). 
  32. Pick, Mark (Abril de 2010). «International Spectrum Conference». 
  33. «time_t – C++ Reference» (en inglés). 6 de abril de 2015. 
  34. Barthel, Olaf (Septiembre de 1998). «File: The Year 2000 Problem and the Amiga» (en inglés). 
  35. Levine, Judah (5 de julio de 2002). Time and frequency distribution using satellites (en inglés). Reports on Progress in Physics. Bibcode:2002RPPh...65.1119L. doi:10.1088/0034-4885/65/8/201. 
  36. «Time Systems and Dates – GPS Time» (en inglés). 2 de enero de 2019. Archivado desde el original el 18 de enero de 2019. 
  37. «FIT SDK - Working with Date Time Values» (en inglés). 1 de enero de 2023. Consultado el 25 de febrero de 2023. 
  38. «Flexible and Interoperable Data Transfer - FIT Protocol» (en inglés). 1 de marzo de 2019. Consultado el 25 de febrero de 2023. 
  39. «AppleSingle/AppleDouble Formats for Foreign Files Developer's Note». Apple Computer, Inc. (en inglés). Archivado desde el original el 17 de julio de 2011. 
  40. «PostgreSQL 9.1.24 Documentation. Chapter 8: Data Types. 8.5. Date/Time Types» (en inglés). 27 de octubre de 2016. «Cuando los valores de las marcas de tiempo se almacenan como enteros de ocho bytes (actualmente el valor por defecto), la precisión de microsegundos está disponible en todo el rango de valores. [Los valores de fecha y hora se almacenan como segundos antes o después de la medianoche de 2000-01-01.» 
  41. ZigBee Cluster Library Specification (en inglés). 29 de mayo de 2008. 
  42. «The Force is strong with this little one» (en inglés). 4 de mayo de 2021. 
  43. «NeoGPS/src/NeoTime.cpp at master · SlashDevin/NeoGPS» (en inglés). 

Enlaces externos

editar