Conversor de Timestamp Unix a Data: Suport per a Format de 12/24 Hores
Converteix timestamps Unix a dates i hores llegibles per humans. Tria entre formats de 12 hores i 24 hores amb aquesta eina de conversió senzilla i fàcil d'utilitzar.
Conversor de Timestamp Unix
Data i Hora Convertides
Documentació
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ó:
1// Conversió de timestamp en JavaScript
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3 // Crear un nou objecte Date (JavaScript utilitza mil·lisegons)
4 const date = new Date(timestamp * 1000);
5
6 // Opcions de format
7 const options = {
8 year: 'numeric',
9 month: 'long',
10 day: 'numeric',
11 weekday: 'long',
12 hour: use12Hour ? 'numeric' : '2-digit',
13 minute: '2-digit',
14 second: '2-digit',
15 hour12: use12Hour
16 };
17
18 // Convertir a cadena utilitzant formatatge de local
19 return date.toLocaleString(undefined, options);
20}
21
22// Exemple d'ús
23const timestamp = 1609459200; // 1 de gener de 2021 00:00:00 UTC
24console.log(convertUnixTimestamp(timestamp, false)); // Format de 24 hores
25console.log(convertUnixTimestamp(timestamp, true)); // Format de 12 hores
26
1# Conversió de timestamp en Python
2import datetime
3
4def convert_unix_timestamp(timestamp, use_12hour=False):
5 # Convertir el timestamp Unix a objecte datetime
6 date = datetime.datetime.fromtimestamp(timestamp)
7
8 # Format de la cadena de data
9 if use_12hour:
10 format_string = "%A, %B %d, %Y %I:%M:%S %p" # Format de 12 hores amb AM/PM
11 else:
12 format_string = "%A, %B %d, %Y %H:%M:%S" # Format de 24 hores
13
14 return date.strftime(format_string)
15
16# Exemple d'ús
17timestamp = 1609459200 # 1 de gener de 2021 00:00:00 UTC
18print(convert_unix_timestamp(timestamp, False)) # Format de 24 hores
19print(convert_unix_timestamp(timestamp, True)) # Format de 12 hores
20
1<?php
2// Conversió de timestamp en PHP
3function convertUnixTimestamp($timestamp, $use12Hour = false) {
4 // Cadena de format
5 $formatString = $use12Hour
6 ? 'l, F j, Y g:i:s A' // Format de 12 hores amb AM/PM
7 : 'l, F j, Y H:i:s'; // Format de 24 hores
8
9 // Convertir i formatar la data
10 return date($formatString, $timestamp);
11}
12
13// Exemple d'ús
14$timestamp = 1609459200; // 1 de gener de 2021 00:00:00 UTC
15echo convertUnixTimestamp($timestamp, false) . "\n"; // Format de 24 hores
16echo convertUnixTimestamp($timestamp, true) . "\n"; // Format de 12 hores
17?>
18
1// Conversió de timestamp en Java
2import java.time.Instant;
3import java.time.LocalDateTime;
4import java.time.ZoneId;
5import java.time.format.DateTimeFormatter;
6
7public class UnixTimestampConverter {
8 public static String convertUnixTimestamp(long timestamp, boolean use12Hour) {
9 // Convertir el timestamp Unix a Instant, després a LocalDateTime
10 Instant instant = Instant.ofEpochSecond(timestamp);
11 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
12
13 // Crear formatador basat en el format desitjat
14 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
15 use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
16 );
17
18 // Format de la data
19 return dateTime.format(formatter);
20 }
21
22 public static void main(String[] args) {
23 long timestamp = 1609459200; // 1 de gener de 2021 00:00:00 UTC
24 System.out.println(convertUnixTimestamp(timestamp, false)); // Format de 24 hores
25 System.out.println(convertUnixTimestamp(timestamp, true)); // Format de 12 hores
26 }
27}
28
1// Conversió de timestamp en C#
2using System;
3
4class UnixTimestampConverter
5{
6 public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
7 {
8 // Convertir el timestamp Unix a DateTime
9 // Els timestamps Unix són segons des de 1970-01-01
10 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
11
12 // Cadena de format basada en la preferència de 12 hores o 24 hores
13 string formatString = use12Hour
14 ? "dddd, MMMM d, yyyy h:mm:ss tt" // Format de 12 hores amb AM/PM
15 : "dddd, MMMM d, yyyy HH:mm:ss"; // Format de 24 hores
16
17 // Retornar la cadena de data formatada
18 return dateTime.ToString(formatString);
19 }
20
21 static void Main()
22 {
23 long timestamp = 1609459200; // 1 de gener de 2021 00:00:00 UTC
24 Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // Format de 24 hores
25 Console.WriteLine(ConvertUnixTimestamp(timestamp, true)); // Format de 12 hores
26 }
27}
28
1# Conversió de timestamp en Ruby
2require 'time'
3
4def convert_unix_timestamp(timestamp, use_12hour = false)
5 # Convertir el timestamp Unix a objecte Time
6 time = Time.at(timestamp)
7
8 # Format basat en la preferència de 12 hores o 24 hores
9 if use_12hour
10 time.strftime("%A, %B %d, %Y %I:%M:%S %p") # Format de 12 hores amb AM/PM
11 else
12 time.strftime("%A, %B %d, %Y %H:%M:%S") # Format de 24 hores
13 end
14end
15
16# Exemple d'ús
17timestamp = 1609459200 # 1 de gener de 2021 00:00:00 UTC
18puts convert_unix_timestamp(timestamp, false) # Format de 24 hores
19puts convert_unix_timestamp(timestamp, true) # Format de 12 hores
20
1// Conversió de timestamp en Go
2package main
3
4import (
5 "fmt"
6 "time"
7)
8
9func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
10 // Convertir el timestamp Unix a Time
11 t := time.Unix(timestamp, 0)
12
13 // Cadena de format basada en la preferència de 12 hores o 24 hores
14 formatString := "Monday, January 2, 2006 "
15 if use12Hour {
16 formatString += "3:04:05 PM" // Format de 12 hores amb AM/PM
17 } else {
18 formatString += "15:04:05" // Format de 24 hores
19 }
20
21 // Retornar el temps formatat
22 return t.Format(formatString)
23}
24
25func main() {
26 timestamp := int64(1609459200) // 1 de gener de 2021 00:00:00 UTC
27 fmt.Println(convertUnixTimestamp(timestamp, false)) // Format de 24 hores
28 fmt.Println(convertUnixTimestamp(timestamp, true)) // Format de 12 hores
29}
30
1// Conversió de timestamp en Swift
2import Foundation
3
4func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
5 // Crear Date a partir del timestamp Unix
6 let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
7
8 // Crear DateFormatter
9 let formatter = DateFormatter()
10 formatter.dateStyle = .full
11
12 // Establir l'estil de temps basat en la preferència de 12 hores o 24 hores
13 if use12Hour {
14 formatter.timeStyle = .medium
15 formatter.amSymbol = "AM"
16 formatter.pmSymbol = "PM"
17 } else {
18 formatter.timeStyle = .medium
19 formatter.dateFormat = formatter.dateFormat?.replacingOccurrences(of: "h:mm:ss a", with: "HH:mm:ss")
20 }
21
22 // Retornar la data formatada
23 return formatter.string(from: date)
24}
25
26// Exemple d'ús
27let timestamp = 1609459200 // 1 de gener de 2021 00:00:00 UTC
28print(convertUnixTimestamp(timestamp, use12Hour: false)) // Format de 24 hores
29print(convertUnixTimestamp(timestamp, use12Hour: true)) // Format de 12 hores
30
1# Conversió de timestamp en R
2convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
3 # Convertir el timestamp Unix a datetime POSIXct
4 date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
5
6 # Format basat en la preferència de 12 hores o 24 hores
7 if (use_12hour) {
8 format_string <- "%A, %B %d, %Y %I:%M:%S %p" # Format de 12 hores amb AM/PM
9 } else {
10 format_string <- "%A, %B %d, %Y %H:%M:%S" # Format de 24 hores
11 }
12
13 # Retornar la cadena de data formatada
14 format(date_time, format_string)
15}
16
17# Exemple d'ús
18timestamp <- 1609459200 # 1 de gener de 2021 00:00:00 UTC
19cat(convert_unix_timestamp(timestamp, FALSE), "\n") # Format de 24 hores
20cat(convert_unix_timestamp(timestamp, TRUE), "\n") # Format de 12 hores
21
1% Conversió de timestamp en MATLAB
2function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
3 % Convertir el timestamp Unix a datetime MATLAB
4 % Les dates de MATLAB són dies des de 1900-01-01, amb 1 = 1900-01-01
5 % Els timestamps Unix són segons des de 1970-01-01
6
7 % Primer convertir a format de data d'Excel
8 % 25569 és el nombre de dies entre 1900-01-01 i 1970-01-01
9 excelDate = (timestamp / 86400) + 25569;
10
11 % Format basat en la preferència de 12 hores o 24 hores
12 if use12Hour
13 formattedDate = datestr(excelDate, 'dddd, mmmm dd, yyyy h:mm:ss AM/PM');
14 else
15 formattedDate = datestr(excelDate, 'dddd, mmmm dd, yyyy hh:mm:ss');
16 end
17end
18
19% Exemple d'ús
20timestamp = 1609459200; % 1 de gener de 2021 00:00:00 UTC
21disp(convertUnixTimestamp(timestamp, false)) % Format de 24 hores
22disp(convertUnixTimestamp(timestamp, true)) % Format de 12 hores
23
1' Conversió de timestamp en Excel VBA
2Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
3 ' Convertir el timestamp Unix a data/hora d'Excel
4 ' Les dates d'Excel són dies des de 1900-01-01, amb 1 = 1900-01-01
5 ' Els timestamps Unix són segons des de 1970-01-01
6
7 ' Primer convertir a format de data d'Excel
8 ' 25569 és el nombre de dies entre 1900-01-01 i 1970-01-01
9 Dim excelDate As Double
10 excelDate = (timestamp / 86400) + 25569
11
12 ' Format de la data basat en la preferència de 12 hores o 24 hores
13 If use12Hour Then
14 ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy h:mm:ss AM/PM")
15 Else
16 ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy hh:mm:ss")
17 End If
18End Function
19
20' Ús en una fulla de càlcul:
21' =ConvertUnixTimestamp(1609459200, TRUE) ' Format de 12 hores
22' =ConvertUnixTimestamp(1609459200, FALSE) ' Format de 24 hores
23
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:
1// Gestió de casos límit en JavaScript
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Comprovar si el timestamp és vàlid
4 if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5 return "Timestamp invàlid";
6 }
7
8 // Comprovar timestamps negatius (dates abans de 1970)
9 if (timestamp < 0) {
10 // Alguns navegadors poden no gestionar correctament els timestamps negatius
11 // Utilitzar un enfocament més robust per a dates abans de 1970
12 const date = new Date(timestamp * 1000);
13 if (isNaN(date.getTime())) {
14 return "Data invàlida (abans de 1970)";
15 }
16 }
17
18 // Comprovar el problema de Y2K38 (per sistemes de 32 bits)
19 const maxInt32 = 2147483647; // Valor màxim per a enter signat de 32 bits
20 if (timestamp > maxInt32) {
21 // Considerar utilitzar BigInt per a timestamps molt grans en JavaScript modern
22 console.warn("El timestamp supera el límit d'enters de 32 bits (problema de Y2K38)");
23 }
24
25 // Procedir amb la conversió normal
26 try {
27 const date = new Date(timestamp * 1000);
28 const options = {
29 year: 'numeric',
30 month: 'long',
31 day: 'numeric',
32 weekday: 'long',
33 hour: use12Hour ? 'numeric' : '2-digit',
34 minute: '2-digit',
35 second: '2-digit',
36 hour12: use12Hour
37 };
38 return date.toLocaleString(undefined, options);
39 } catch (error) {
40 return "Error convertint el timestamp: " + error.message;
41 }
42}
43
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.
Comentaris
Fes clic a la notificació de comentaris per començar a donar comentaris sobre aquesta eina
Eines relacionades
Descobreix més eines que podrien ser útils per al teu flux de treball