Conversor de Timestamp Unix
Data i Hora Convertides
Conversor de Timestamp Unix
Introducció
Un timestamp Unix (també conegut com a temps POSIX o temps Epoch) és un sistema per descriure un moment en el temps. És el nombre de segons que han passat des de l'1 de gener de 1970 (mitjanit UTC/GMT), sense comptar els segons intercalars. Els timestamps Unix s'utilitzen àmpliament en sistemes informàtics i llenguatges de programació, ja que proporcionen una representació compacta i independent de l'idioma d'un moment específic en el temps.
Aquest conversor et permet transformar un timestamp Unix en un format de data i hora llegible per a humans. Admet tant formats de 12 hores (AM/PM) com de 24 hores per acomodar diferents preferències regionals i personals.
Com Funcionen els Timestamps Unix
Els timestamps Unix es calculen com el nombre de segons des de l'Epoch Unix (l'1 de gener de 1970, 00:00:00 UTC). Això els fa particularment útils per calcular diferències de temps i per emmagatzemar dates en un format compacte.
La conversió matemàtica d'un timestamp Unix a una data del calendari implica diversos passos:
- Començar amb l'Epoch Unix (l'1 de gener de 1970, 00:00:00 UTC)
- Afegir el nombre de segons del timestamp
- Tenir en compte els anys de traspàs, les variacions en la longitud dels mesos i altres complexitats del calendari
- Aplicar ajustaments de zona horària si és necessari
Per exemple, el timestamp Unix 1609459200
representa divendres, 1 de gener de 2021, 00:00:00 UTC.
La fórmula de conversió es pot expressar com:
La majoria dels llenguatges de programació i sistemes operatius proporcionen funcions integrades per gestionar aquesta conversió, abstraient les complexes càlculs del calendari.
Opcions de Format de Temps
Aquest conversor ofereix dues opcions de format de temps:
-
Format de 24 hores (de vegades anomenat "hora militar"): Les hores van de 0 a 23, i no hi ha designació AM/PM. Per exemple, les 3:00 PM es representen com a 15:00.
-
Format de 12 hores: Les hores van de 1 a 12, amb AM (ante meridiem) per als moments de mitjanit a migdia, i PM (post meridiem) per als moments de migdia a mitjanit. Per exemple, les 15:00 en format de 24 hores es representen com a 3:00 PM.
L'elecció entre aquests formats és en gran mesura una qüestió de convenció regional i preferència personal:
- El format de 24 hores s'utilitza comunament a la majoria d'Europa, Amèrica Llatina i Àsia, així com en contextos científics, militars i mèdics a nivell mundial.
- El format de 12 hores és prevalent als Estats Units, Canadà, Austràlia i alguns altres països de parla anglesa per a l'ús quotidià.
Casos Límit i Limitacions
En treballar amb timestamps Unix, és important ser conscient de diversos casos límit i limitacions:
-
Timestamps negatius: Aquests representen dates abans de l'Epoch Unix (l'1 de gener de 1970). Si bé són matemàticament vàlids, alguns sistemes poden no gestionar correctament els timestamps negatius.
-
El Problema de l'Any 2038: Els timestamps Unix sovint es desaven com a enters signats de 32 bits, que desbordaran el 19 de gener de 2038. Després d'aquest punt, els sistemes de 32 bits no podran representar els temps correctament a menys que es modifiquin per utilitzar un tipus d'enter més gran.
-
Timestamps extremadament grans: Dates molt llunyanes en el futur poden no ser representables en alguns sistemes, o poden ser gestionades de manera inconsistent.
-
Segons intercalars: El temps Unix no té en compte els segons intercalars, que s'afegeixen ocasionalment a UTC per compensar la rotació irregular de la Terra. Això significa que el temps Unix no està sincronitzat de manera precisa amb el temps astronòmic.
-
Consideracions de zona horària: Els timestamps Unix representen moments en UTC. Convertir a l'hora local requereix informació addicional sobre la zona horària.
-
Estalvi d'horari d'estiu: En convertir timestamps a l'hora local, cal tenir en compte les complexitats de les transicions de l'estalvi d'horari d'estiu.
Casos d'Ús
Els timestamps Unix s'utilitzen en nombroses aplicacions a través de la informàtica i la gestió de dades:
-
Registres de bases de dades: Els timestamps s'utilitzen comunament per enregistrar quan es van crear o modificar les entrades.
-
Desenvolupament web: Les capçaleres HTTP, les galetes i els mecanismes de memòria cau sovint utilitzen timestamps Unix.
-
Fitxers de registre: Els registres del sistema solen enregistrar esdeveniments amb timestamps Unix per a un ordre cronològic precís.
-
Sistemes de control de versions: Git i altres VCS utilitzen timestamps per enregistrar quan es van fer les confirmacions.
-
Respostes d'API: Moltes API web inclouen timestamps en les seves respostes per indicar quan es va generar la dada o quan es van modificar els recursos.
-
Sistemes de fitxers: Els temps de creació i modificació dels fitxers sovint es desaven com a timestamps Unix.
-
Gestió de sessions: Les aplicacions web utilitzen timestamps per determinar quan les sessions d'usuari haurien d'expirar.
-
Anàlisi de dades: Els timestamps proporcionen una manera estandarditzada de treballar amb dades temporals en aplicacions d'analítica.
Alternatives
Si bé els timestamps Unix s'utilitzen àmpliament, hi ha formats alternatius de representació del temps que poden ser més adequats en certs contextos:
-
ISO 8601: Un format de cadena estandarditzat (per exemple, "2021-01-01T00:00:00Z") que és llegible per a humans mentre manté la capacitat de ser ordenat. S'utilitza sovint per a la intercanvi de dades i aplicacions orientades a l'usuari.
-
RFC 3339: Un perfil d'ISO 8601 utilitzat en protocols d'internet, amb requisits de format més estrictes.
-
Formats llegibles per a humans: Cadenes de data localitzades (per exemple, "1 de gener de 2021") són més adequades per a la interacció directa amb l'usuari, però són menys adequades per al càlcul.
-
Microsoft FILETIME: Un valor de 64 bits que representa el nombre d'intervals de 100 nanosegons des de l'1 de gener de 1601, utilitzat en sistemes Windows.
-
Número de dia Julià: Utilitzat en astronomia i algunes aplicacions científiques, comptant els dies des de l'1 de gener de 4713 aC.
L'elecció del format de temps depèn de factors com:
- Precisió requerida
- Necessitats de llegibilitat humana
- Restriccions d'emmagatzematge
- Compatibilitat amb sistemes existents
- Rangs de dates que cal representar
Història
El concepte de temps Unix va originar-se amb el desenvolupament del sistema operatiu Unix a Bell Labs a finals dels anys 60 i principis dels anys 70. La decisió d'utilitzar l'1 de gener de 1970 com a època era una mica arbitrària però pràctica per a l'època: era recent prou per minimitzar els requisits d'emmagatzematge per a dates d'interès, però prou llunyana en el passat per ser útil per a dades històriques.
La implementació original utilitzava un enter signat de 32 bits per emmagatzemar el nombre de segons, que era adequat per a la vida útil esperada dels sistemes Unix en aquell moment. No obstant això, aquesta decisió va portar al Problema de l'Any 2038 (de vegades anomenat "Y2K38" o "El Bug del Mil·lenni Unix"), ja que els enters signats de 32 bits només poden representar dates fins al 19 de gener de 2038 (03:14:07 UTC).
A mesura que Unix i els sistemes similars a Unix van guanyar popularitat, el timestamp Unix es va convertir en un estàndard de facto per representar el temps en la informàtica. Va ser adoptat per nombrosos llenguatges de programació, bases de dades i aplicacions, ampliant-se molt més enllà del seu entorn original de Unix.
Els sistemes moderns utilitzen cada vegada més enters de 64 bits per a timestamps, cosa que amplia el rang representable a aproximadament 292 mil milions d'anys en ambdues direccions des de l'època, resolent efectivament el Problema de l'Any 2038. No obstant això, els sistemes i aplicacions llegats poden seguir sent vulnerables.
La simplicitat i utilitat del timestamp Unix han assegurat la seva continuïtat rellevància malgrat el desenvolupament de formats de representació del temps més sofisticats. Continua sent un concepte fonamental en la informàtica, fonamentant gran part de la nostra infraestructura digital.
Exemples de Codi
Aquí hi ha exemples de com convertir timestamps Unix a dates llegibles per a humans en diversos llenguatges de programació:
// Conversió de timestamp en JavaScript
function convertUnixTimestamp(timestamp, use12Hour = false) {
// Crear un nou objecte Date (JavaScript utilitza mil·lisegons)
const date = new Date(timestamp * 1000);
// Opcions de format
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: use12Hour ? 'numeric' : '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: use12Hour
};
// Convertir a cadena utilitzant formatatge de local
return date.toLocaleString(undefined, options);
}
// Exemple d'ús
const timestamp = 1609459200; // 1 de gener de 2021 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // Format de 24 hores
console.log(convertUnixTimestamp(timestamp, true)); // Format de 12 hores
Gestió de Casos Límit
En treballar amb timestamps Unix, és important gestionar correctament els casos límit. Aquí hi ha exemples de gestió d'alguns casos límit comuns:
// Gestió de casos límit en JavaScript
function safeConvertTimestamp(timestamp, use12Hour = false) {
// Comprovar si el timestamp és vàlid
if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
return "Timestamp invàlid";
}
// Comprovar timestamps negatius (dates abans de 1970)
if (timestamp < 0) {
// Alguns navegadors poden no gestionar correctament els timestamps negatius
// Utilitzar un enfocament més robust per a dates abans de 1970
const date = new Date(timestamp * 1000);
if (isNaN(date.getTime())) {
return "Data invàlida (abans de 1970)";
}
}
// Comprovar el problema de Y2K38 (per sistemes de 32 bits)
const maxInt32 = 2147483647; // Valor màxim per a enter signat de 32 bits
if (timestamp > maxInt32) {
// Considerar utilitzar BigInt per a timestamps molt grans en JavaScript modern
console.warn("El timestamp supera el límit d'enters de 32 bits (problema de Y2K38)");
}
// Procedir amb la conversió normal
try {
const date = new Date(timestamp * 1000);
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: use12Hour ? 'numeric' : '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: use12Hour
};
return date.toLocaleString(undefined, options);
} catch (error) {
return "Error convertint el timestamp: " + error.message;
}
}
Referències
-
"Temps Unix." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time
-
"Problema de l'Any 2038." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "Les Complexitats del Temps Calendrical." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: Data i Hora a Internet: Timestamps." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., i Dennis M. Ritchie. "El Llenguatge de Programació C." Prentice Hall, 1988.