# Época (informática)

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. 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

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

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. 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".

## En los sistemas horarios por satélite

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. 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".

## Épocas destacadas de la informática

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. | MATLAB | Año 0" en ISO 8601 |
| 1 de enero 1 d. C. | Microsoft .NET, Go, REXX, Rata Die | Era común, ISO 2014, RFC 3339 |
| 14 de octubre de 1582 | SPSS, IBM z/OS Entorno Lingüístico, IBM AIX COBOL | 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 |
| 1 de enero de 1601 | NTFS, COBOL, Win32/Win64 (época NT) | 1601 era el primer año del ciclo de 400 años del calendario gregoriano en la época en que se creó Windows NT |
| 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 |
| 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 | 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 |
| 30 de diciembre de 1899 | Microsoft COM DATE, Object Pascal, LibreOffice Calc, Google Sheets | Valor técnico interno utilizado por Microsoft Excel; para compatibilidad con Lotus 1-2-3. |
| 31 de diciembre de 1899 | Dyalog APL, Microsoft C/C++ 7.0 | 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, Lotus 1-2-3 | 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 | 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 |
| 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 | 1904 es el primer año bisiesto del siglo XX |
| 1 de enero de 1960 | Sistema SAS | |
| 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 |
| 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++, 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. 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 |
| 31 de diciembre de 1989 | Garmin FIT Epoch. 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 | |
| 1 de enero de 2000 | AppleSingle, AppleDouble, PostgreSQL, Zigbee UTCTime, helicóptero Ingenuity | Esta época del efecto 2000 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. |