Convertor de Timestamp Unix în Dată: Suport pentru Format de 12/24 Ore
Convertește timestamp-urile Unix în date și ore ușor de citit. Alege între formatele de timp de 12 ore și 24 ore cu acest instrument simplu și prietenos.
Converter de Timestamp Unix
Data și Ora Convertită
Documentație
Converter de Timestamp Unix
Introducere
Un timestamp Unix (cunoscut și sub numele de timp POSIX sau timp Epoch) este un sistem pentru descrierea unui moment în timp. Este numărul de secunde care au trecut de la 1 ianuarie 1970 (miezul nopții UTC/GMT), fără a lua în considerare secunde intercalare. Timestamps Unix sunt utilizate pe scară largă în sistemele de calcul și limbajele de programare, deoarece oferă o reprezentare compactă, independentă de limbaj, a unui moment specific în timp.
Acest converter de timestamp la dată detectează și procesează automat timestamps de diferite lungimi, inclusiv precizie în microsecunde (16 cifre), precizie în milisecunde (13 cifre) și timestamps Unix standard (10 cifre). Instrumentul identifică formatul timestamp-ului pe baza lungimii introducerii, îl convertește într-un format de dată și oră ușor de citit și afișează rezultatul fără a necesita ca utilizatorii să specifice tipul timestamp-ului. Suportă atât formatul de timp de 12 ore (AM/PM), cât și formatul de 24 de ore pentru a se adapta diferitelor preferințe regionale și personale.
Cum funcționează Timestamps Unix
Timestamps Unix sunt calculate ca numărul de secunde de la Epoch-ul Unix (1 ianuarie 1970, 00:00:00 UTC). Acest lucru le face deosebit de utile pentru calcularea diferențelor de timp și pentru stocarea datelor într-un format compact.
Conversia matematică de la un timestamp Unix la o dată calendaristică implică mai mulți pași:
- Începe cu Epoch-ul Unix (1 ianuarie 1970, 00:00:00 UTC)
- Adaugă numărul de secunde din timestamp
- Ține cont de anii bisecți, lungimile variate ale lunilor și alte complexități calendaristice
- Aplică ajustările de fus orar, dacă este necesar
De exemplu, timestamp-ul Unix 1609459200
reprezintă vineri, 1 ianuarie 2021, 00:00:00 UTC.
Formula de conversie poate fi exprimată astfel:
Cele mai multe limbaje de programare și sisteme de operare oferă funcții încorporate pentru a gestiona această conversie, abstractizând calculele complexe ale calendarului.
Formatele Timestamp și Detectarea Automată
Converterul nostru suportă trei formate comune de timestamp, care sunt detectate automat pe baza numărului de cifre:
-
Timestamp Unix standard (10 cifre): Reprezintă secunde de la Epoch-ul Unix. Exemplu:
1609459200
(1 ianuarie 2021, 00:00:00 UTC) -
Precizie în milisecunde (13 cifre): Reprezintă milisecunde de la Epoch-ul Unix. Exemplu:
1609459200000
(1 ianuarie 2021, 00:00:00 UTC) -
Precizie în microsecunde (16 cifre): Reprezintă microsecunde de la Epoch-ul Unix. Exemplu:
1609459200000000
(1 ianuarie 2021, 00:00:00 UTC)
Detectarea automată funcționează prin analizarea lungimii introducerii:
- Dacă introducerea conține 10 cifre, este tratată ca un timestamp Unix standard (secunde)
- Dacă introducerea conține 13 cifre, este tratată ca un timestamp în milisecunde
- Dacă introducerea conține 16 cifre, este tratată ca un timestamp în microsecunde
Această detectare automată elimină necesitatea ca utilizatorii să specifice tipul timestamp-ului, făcând instrumentul mai prietenos și eficient.
Opțiuni de Format pentru Timp
Acest converter oferă două opțiuni de format pentru timp:
-
Format de 24 de ore (cunoscut uneori ca „timp militar”): Orele variază de la 0 la 23, iar nu există denumire AM/PM. De exemplu, 3:00 PM este reprezentat ca 15:00.
-
Format de 12 ore: Orele variază de la 1 la 12, cu AM (ante meridiem) pentru orele de la miezul nopții până la prânz, și PM (post meridiem) pentru orele de la prânz până la miezul nopții. De exemplu, 15:00 în format de 24 de ore este reprezentat ca 3:00 PM.
Alegerea între aceste formate este în mare măsură o chestiune de convenție regională și preferință personală:
- Formatul de 24 de ore este utilizat frecvent în majoritatea Europei, Americii Latine și Asiei, precum și în contexte științifice, militare și medicale din întreaga lume.
- Formatul de 12 ore este prevalent în Statele Unite, Canada, Australia și în alte țări vorbitoare de engleză pentru utilizarea zilnică.
Cazuri Limite și Limitări
Atunci când lucrați cu timestamps Unix de diferite precizii, este important să fiți conștienți de mai multe cazuri limită și limitări:
-
Timestamps negative: Acestea reprezintă date înainte de Epoch-ul Unix (1 ianuarie 1970). Deși sunt matematic valide, unele sisteme pot să nu gestioneze corect timestamps negative. Acest lucru se aplică tuturor celor trei formate de timestamp.
-
Problema Anului 2038: Timestamps Unix standard (10 cifre) sunt adesea stocate ca întregi semnați de 32 de biți, care vor depăși limita pe 19 ianuarie 2038. După acest moment, sistemele pe 32 de biți nu vor putea reprezenta corect timpii, cu excepția cazului în care sunt modificate pentru a utiliza un tip de întreg mai mare.
-
Considerații de precizie:
- Timestamps standard (10 cifre) au precizie la nivel de secundă, care este suficientă pentru cele mai multe aplicații de zi cu zi.
- Timestamps în milisecunde (13 cifre) oferă o precizie de 1000x mai mare, utilă pentru aplicațiile care necesită un timp mai precis.
- Timestamps în microsecunde (16 cifre) oferă o granularitate și mai fină (1/1,000,000 dintr-o secundă), care este necesară pentru calculul de înaltă performanță, aplicațiile științifice și anumite tranzacții financiare.
-
Timestamps extrem de mari: Datele foarte îndepărtate în viitor pot să nu fie reprezentabile în unele sisteme sau pot fi gestionate inconsistent. Acest lucru este deosebit de relevant pentru timestamps în milisecunde și microsecunde, care utilizează valori numerice mai mari.
-
Secunde intercalare: Timpul Unix nu ține cont de secunde intercalare, care sunt adăugate ocazional la UTC pentru a compensa rotația neregulată a Pământului. Aceasta înseamnă că timpul Unix nu este sincronizat precis cu timpul astronomic.
-
Considerații de fus orar: Timestamps Unix reprezintă momente în UTC. Conversia la ora locală necesită informații suplimentare despre fusul orar.
-
Timpul de vară: Atunci când se convertește timestamps la ora locală, trebuie să se țină cont de complexitățile tranzițiilor de timp de vară.
-
Confuzia formatului timestamp-ului: Fără o detectare corespunzătoare, un timestamp în milisecunde de 13 cifre ar putea fi interpretat greșit ca o dată foarte îndepărtată în viitor dacă este tratat ca un timestamp bazat pe secunde. Converterul nostru previne acest lucru prin detectarea automată a formatului pe baza lungimii cifrelor.
Cazuri de Utilizare
Timestamps Unix de diferite precizii sunt utilizate în numeroase aplicații în domeniul calculului și gestionării datelor:
-
Înregistrări de Bază de Date: Timestamps sunt utilizate frecvent pentru a înregistra când au fost create sau modificate intrările.
- Timestamps standard (10 cifre) sunt adesea suficiente pentru aplicațiile generale de baze de date.
- Timestamps în milisecunde (13 cifre) sunt utilizate atunci când este necesară o ordonare mai precisă a evenimentelor.
-
Dezvoltare Web: Header-ele HTTP, cookie-urile și mecanismele de caching utilizează adesea timestamps Unix.
- Funcția
Date.now()
din JavaScript returnează timestamps în milisecunde (13 cifre).
- Funcția
-
Fișiere de Jurnal: Jurnalele de sistem înregistrează de obicei evenimente cu timestamps Unix pentru o ordonare cronologică precisă.
- Sistemele de jurnalizare de înaltă frecvență pot utiliza precizie în milisecunde sau microsecunde.
-
Sisteme de Control al Versiunilor: Git și alte VCS utilizează timestamps pentru a înregistra când au fost făcute comiterile.
-
Răspunsuri API: Multe API-uri web includ timestamps în răspunsurile lor pentru a indica când au fost generate datele sau când au fost modificate ultimele resurse.
- API-urile REST utilizează adesea timestamps în precizie milisecundă.
-
Sisteme de Fișiere: Timpurile de creare și modificare a fișierelor sunt adesea stocate ca timestamps Unix.
-
Gestionarea Sesiunilor: Aplicațiile web utilizează timestamps pentru a determina când sesiunile utilizatorilor ar trebui să expire.
-
Analiza Datelor: Timestamps oferă o modalitate standardizată de a lucra cu date temporale în aplicațiile de analiză.
-
Tranzacții de Înaltă Frecvență: Sistemele financiare necesită adesea precizie în microsecunde (16 cifre) pentru a ordona corect tranzacțiile.
-
Măsurători Științifice: Echipamentele de cercetare pot înregistra observații cu precizie în microsecunde pentru o analiză temporală precisă.
Alternative
Deși timestamps Unix sunt utilizate pe scară largă, există formate alternative de reprezentare a timpului care pot fi mai potrivite în anumite contexte:
-
ISO 8601: Un format standardizat de șir (de exemplu, "2021-01-01T00:00:00Z") care este ușor de citit de oameni, menținând în același timp sortabilitatea. Este adesea preferat pentru schimbul de date și aplicațiile destinate utilizatorilor.
-
RFC 3339: Un profil al ISO 8601 utilizat în protocoalele de internet, cu cerințe de formatare mai stricte.
-
Formate ușor de citit de oameni: Șirurile de date localizate (de exemplu, "1 ianuarie 2021") sunt mai potrivite pentru interacțiunea directă cu utilizatorul, dar sunt mai puțin adecvate pentru calcul.
-
Microsoft FILETIME: O valoare de 64 de biți care reprezintă numărul de intervale de 100 de nanosecunde de la 1 ianuarie 1601, utilizată în sistemele Windows.
-
Numărul de Zi Julian: Utilizat în astronomie și în unele aplicații științifice, numărând zilele de la 1 ianuarie 4713 î.Hr.
Alegerea formatului de timp depinde de factori precum:
- Precizia necesară
- Nevoile de lizibilitate umană
- Constrângerile de stocare
- Compatibilitatea cu sistemele existente
- Intervalul de date care trebuie reprezentat
Istorie
Conceptul de timp Unix a apărut odată cu dezvoltarea sistemului de operare Unix la Bell Labs la sfârșitul anilor 1960 și începutul anilor 1970. Decizia de a folosi 1 ianuarie 1970 ca epoch a fost oarecum arbitrară, dar practică pentru acea vreme - era suficient de recentă pentru a minimiza cerințele de stocare pentru datele de interes, dar suficient de departe în trecut pentru a fi utilă pentru datele istorice.
Implementarea originală a folosit un întreg semnat de 32 de biți pentru a stoca numărul de secunde, ceea ce era adecvat pentru durata de viață a sistemelor Unix așteptată la acea vreme. Cu toate acestea, această decizie a dus la problema Anului 2038 (cunoscută uneori sub numele de "Y2K38" sau "Bugul Mileniului Unix"), deoarece întregii semnați de 32 de biți pot reprezenta doar date până la 19 ianuarie 2038.
Pe măsură ce nevoile de calcul au evoluat, timestamps de precizie mai mare au devenit necesare:
-
Precizia în milisecunde (13 cifre) a devenit comună odată cu creșterea calculului interactiv și nevoia de a măsura răspunsul interfeței utilizatorului.
-
Precizia în microsecunde (16 cifre) a apărut cu aplicațiile de calcul de înaltă performanță și sistemele care necesită un timp extrem de precis.
Pe măsură ce sistemele Unix și cele asemănătoare Unix au câștigat popularitate, timestamp-ul Unix a devenit un standard de facto pentru reprezentarea timpului în calcul. A fost adoptat de numeroase limbaje de programare, baze de date și aplicații, extinzându-se mult dincolo de mediul său original Unix.
Sistemele moderne utilizează din ce în ce mai mult întregi de 64 de biți pentru timestamps, ceea ce extinde intervalul reprezentabil la aproximativ 292 de miliarde de ani în ambele direcții de la epoch, rezolvând efectiv problema Anului 2038. Cu toate acestea, sistemele și aplicațiile moștenite pot fi încă vulnerabile.
Simplitatea și utilitatea timestamp-ului Unix au asigurat relevanța sa continuă, în ciuda dezvoltării unor formate de reprezentare a timpului mai sofisticate. Rămâne un concept fundamental în calcul, stând la baza multor infrastructuri digitale.
Exemple de Cod
Iată exemple de cum să convertiți timestamps Unix de diferite precizii în date ușor de citit în diferite limbaje de programare:
1// Conversia timestamp-ului în JavaScript cu detectarea automată a formatului
2function convertTimestamp(timestamp, use12Hour = false) {
3 // Convertiți șirul în număr, dacă este necesar
4 const numericTimestamp = Number(timestamp);
5
6 // Detectați formatul timestamp-ului pe baza lungimii cifrelor
7 let date;
8 if (timestamp.length === 16) {
9 // Precizie în microsecunde (împărțiți la 1.000.000 pentru a obține secunde)
10 date = new Date(numericTimestamp / 1000);
11 console.log("Detectat: Timestamp de precizie în microsecunde");
12 } else if (timestamp.length === 13) {
13 // Precizie în milisecunde
14 date = new Date(numericTimestamp);
15 console.log("Detectat: Timestamp de precizie în milisecunde");
16 } else if (timestamp.length === 10) {
17 // Timestamp Unix standard (secunde)
18 date = new Date(numericTimestamp * 1000);
19 console.log("Detectat: Timestamp Unix standard (secunde)");
20 } else {
21 throw new Error("Format timestamp invalid. Se așteaptă 10, 13 sau 16 cifre.");
22 }
23
24 // Opțiuni de formatare
25 const options = {
26 year: 'numeric',
27 month: 'long',
28 day: 'numeric',
29 weekday: 'long',
30 hour: use12Hour ? 'numeric' : '2-digit',
31 minute: '2-digit',
32 second: '2-digit',
33 hour12: use12Hour
34 };
35
36 // Converteți în șir folosind formatarea locală
37 return date.toLocaleString(undefined, options);
38}
39
40// Exemplu de utilizare
41try {
42 // Timestamp Unix standard (10 cifre)
43 console.log(convertTimestamp("1609459200", false));
44
45 // Precizie în milisecunde (13 cifre)
46 console.log(convertTimestamp("1609459200000", false));
47
48 // Precizie în microsecunde (16 cifre)
49 console.log(convertTimestamp("1609459200000000", true));
50} catch (error) {
51 console.error(error.message);
52}
53
1# Conversia timestamp-ului în Python cu detectarea automată a formatului
2import datetime
3
4def convert_timestamp(timestamp, use_12hour=False):
5 # Convertiți în întreg
6 timestamp = str(timestamp).strip()
7 numeric_timestamp = int(timestamp)
8
9 # Detectați formatul timestamp-ului pe baza lungimii cifrelor
10 if len(timestamp) == 16:
11 # Precizie în microsecunde (împărțiți la 1.000.000 pentru a obține secunde)
12 date = datetime.datetime.fromtimestamp(numeric_timestamp / 1000000)
13 print("Detectat: Timestamp de precizie în microsecunde")
14 elif len(timestamp) == 13:
15 # Precizie în milisecunde (împărțiți la 1.000 pentru a obține secunde)
16 date = datetime.datetime.fromtimestamp(numeric_timestamp / 1000)
17 print("Detectat: Timestamp de precizie în milisecunde")
18 elif len(timestamp) == 10:
19 # Timestamp Unix standard (secunde)
20 date = datetime.datetime.fromtimestamp(numeric_timestamp)
21 print("Detectat: Timestamp Unix standard (secunde)")
22 else:
23 raise ValueError("Format timestamp invalid. Se așteaptă 10, 13 sau 16 cifre.")
24
25 # Formatați șirul de dată
26 if use_12hour:
27 format_string = "%A, %B %d, %Y %I:%M:%S %p" # Format de 12 ore cu AM/PM
28 else:
29 format_string = "%A, %B %d, %Y %H:%M:%S" # Format de 24 de ore
30
31 return date.strftime(format_string)
32
33# Exemplu de utilizare
34try:
35 # Timestamp Unix standard (10 cifre)
36 print(convert_timestamp("1609459200", False))
37
38 # Precizie în milisecunde (13 cifre)
39 print(convert_timestamp("1609459200000", False))
40
41 # Precizie în microsecunde (16 cifre)
42 print(convert_timestamp("1609459200000000", True))
43except ValueError as e:
44 print(e)
45
1<?php
2// Conversia timestamp-ului în PHP cu detectarea automată a formatului
3function convertTimestamp($timestamp, $use12Hour = false) {
4 // Asigurați-vă că timestamp-ul este un șir pentru verificarea lungimii
5 $timestamp = trim((string)$timestamp);
6
7 // Detectați formatul timestamp-ului pe baza lungimii cifrelor
8 if (strlen($timestamp) === 16) {
9 // Precizie în microsecunde (împărțiți la 1.000.000 pentru a obține secunde)
10 $seconds = $numericTimestamp / 1000000;
11 echo "Detectat: Timestamp de precizie în microsecunde\n";
12 } elseif (strlen($timestamp) === 13) {
13 // Precizie în milisecunde
14 $seconds = $numericTimestamp / 1000;
15 echo "Detectat: Timestamp de precizie în milisecunde\n";
16 } elseif (strlen($timestamp) === 10) {
17 // Timestamp Unix standard (secunde)
18 $seconds = $numericTimestamp;
19 echo "Detectat: Timestamp Unix standard (secunde)\n";
20 } else {
21 throw new Exception("Format timestamp invalid. Se așteaptă 10, 13 sau 16 cifre.");
22 }
23
24 // Formatul șirului
25 $formatString = $use12Hour
26 ? 'l, F j, Y g:i:s A' // Format de 12 ore cu AM/PM
27 : 'l, F j, Y H:i:s'; // Format de 24 de ore
28
29 // Converteți și formatați data
30 return date($formatString, $seconds);
31}
32
33// Exemplu de utilizare
34try {
35 // Timestamp Unix standard (10 cifre)
36 echo convertTimestamp("1609459200", false) . "\n";
37
38 // Precizie în milisecunde (13 cifre)
39 echo convertTimestamp("1609459200000", false) . "\n";
40
41 // Precizie în microsecunde (16 cifre)
42 echo convertTimestamp("1609459200000000", true) . "\n";
43} catch (Exception $e) {
44 echo $e->getMessage() . "\n";
45}
46?>
47
1// Conversia timestamp-ului în Java cu detectarea automată a formatului
2import java.time.Instant;
3import java.time.LocalDateTime;
4import java.time.ZoneId;
5import java.time.format.DateTimeFormatter;
6
7public class TimestampConverter {
8 public static String convertTimestamp(String timestamp, boolean use12Hour) {
9 // Tăiați intrarea
10 timestamp = timestamp.trim();
11
12 // Detectați formatul timestamp-ului pe baza lungimii cifrelor
13 LocalDateTime dateTime;
14 if (timestamp.length() == 16) {
15 // Precizie în microsecunde (împărțiți la 1.000.000 pentru a obține secunde)
16 long microseconds = Long.parseLong(timestamp);
17 Instant instant = Instant.ofEpochSecond(0, microseconds * 1000); // Converteți în nanosecunde
18 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
19 System.out.println("Detectat: Timestamp de precizie în microsecunde");
20 } else if (timestamp.length() == 13) {
21 // Precizie în milisecunde
22 long milliseconds = Long.parseLong(timestamp);
23 Instant instant = Instant.ofEpochMilli(milliseconds);
24 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
25 System.out.println("Detectat: Timestamp de precizie în milisecunde");
26 } else if (timestamp.length() == 10) {
27 // Timestamp Unix standard (secunde)
28 long seconds = Long.parseLong(timestamp);
29 Instant instant = Instant.ofEpochSecond(seconds);
30 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
31 System.out.println("Detectat: Timestamp Unix standard (secunde)");
32 } else {
33 throw new IllegalArgumentException("Format timestamp invalid. Se așteaptă 10, 13 sau 16 cifre.");
34 }
35
36 // Creați un formatter pe baza formatului dorit
37 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
38 use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
39 );
40
41 // Formatați data
42 return dateTime.format(formatter);
43 }
44
45 public static void main(String[] args) {
46 try {
47 // Timestamp Unix standard (10 cifre)
48 System.out.println(convertTimestamp("1609459200", false));
49
50 // Precizie în milisecunde (13 cifre)
51 System.out.println(convertTimestamp("1609459200000", false));
52
53 // Precizie în microsecunde (16 cifre)
54 System.out.println(convertTimestamp("1609459200000000", true));
55 } catch (IllegalArgumentException e) {
56 System.err.println(e.getMessage());
57 }
58 }
59}
60
1// Conversia timestamp-ului în C# cu detectarea automată a formatului
2using System;
3
4class TimestampConverter
5{
6 public static string ConvertTimestamp(string timestamp, bool use12Hour)
7 {
8 // Tăiați intrarea
9 timestamp = timestamp.Trim();
10
11 // Detectați formatul timestamp-ului pe baza lungimii cifrelor
12 DateTime dateTime;
13 if (timestamp.Length == 16)
14 {
15 // Precizie în microsecunde (împărțiți la 1.000.000 pentru a obține secunde)
16 if (!double.TryParse(timestamp, out double microseconds))
17 throw new ArgumentException("Format timestamp invalid");
18
19 // Converteți microsecunde în DateTime
20 dateTime = DateTimeOffset.FromUnixTimeSeconds(0).DateTime.AddSeconds(microseconds / 1000000);
21 Console.WriteLine("Detectat: Timestamp de precizie în microsecunde");
22 }
23 else if (timestamp.Length == 13)
24 {
25 // Precizie în milisecunde
26 if (!long.TryParse(timestamp, out long milliseconds))
27 throw new ArgumentException("Format timestamp invalid");
28
29 dateTime = DateTimeOffset.FromUnixTimeMilliseconds(milliseconds).DateTime;
30 Console.WriteLine("Detectat: Timestamp de precizie în milisecunde");
31 }
32 else if (timestamp.Length == 10)
33 {
34 // Timestamp Unix standard (secunde)
35 if (!long.TryParse(timestamp, out long seconds))
36 throw new ArgumentException("Format timestamp invalid");
37
38 dateTime = DateTimeOffset.FromUnixTimeSeconds(seconds).DateTime;
39 Console.WriteLine("Detectat: Timestamp Unix standard (secunde)");
40 }
41 else
42 {
43 throw new ArgumentException("Format timestamp invalid. Se așteaptă 10, 13 sau 16 cifre.");
44 }
45
46 // Formatul șirului pe baza preferinței de 12 ore sau 24 de ore
47 string formatString = use12Hour
48 ? "dddd, MMMM d, yyyy h:mm:ss tt" // Format de 12 ore cu AM/PM
49 : "dddd, MMMM d, yyyy HH:mm:ss"; // Format de 24 de ore
50
51 // Returnați șirul de dată formatat
52 return dateTime.ToString(formatString);
53 }
54
55 static void Main()
56 {
57 try
58 {
59 // Timestamp Unix standard (10 cifre)
60 Console.WriteLine(ConvertTimestamp("1609459200", false));
61
62 // Precizie în milisecunde (13 cifre)
63 Console.WriteLine(ConvertTimestamp("1609459200000", false));
64
65 // Precizie în microsecunde (16 cifre)
66 Console.WriteLine(ConvertTimestamp("1609459200000000", true));
67 }
68 catch (ArgumentException e)
69 {
70 Console.WriteLine(e.Message);
71 }
72 }
73}
74
Gestionarea Cazurilor Limite
Atunci când lucrați cu timestamps de diverse precizii, este important să gestionați corect cazurile limită. Iată un exemplu care demonstrează gestionarea cuprinzătoare a cazurilor limită:
1// Gestionarea cuprinzătoare a cazurilor limită pentru timestamp-uri în JavaScript
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Validarea intrării
4 if (timestamp === undefined || timestamp === null || timestamp === '') {
5 return "Eroare: Timestamp gol sau nedefinit";
6 }
7
8 // Asigurați-vă că timestamp-ul este un șir pentru verificarea lungimii
9 const timestampStr = String(timestamp).trim();
10
11 // Verificați dacă timestamp-ul conține doar cifre
12 if (!/^\d+$/.test(timestampStr)) {
13 return "Eroare: Timestamp-ul trebuie să conțină doar cifre";
14 }
15
16 // Detectați formatul pe baza lungimii
17 let date;
18 try {
19 if (timestampStr.length === 16) {
20 // Precizie în microsecunde
21 const microseconds = Number(timestampStr);
22 date = new Date(microseconds / 1000); // Converteți în milisecunde
23 console.log("Se procesează timestamp-ul în microsecunde (16 cifre)");
24
25 // Verificați data invalidă
26 if (isNaN(date.getTime())) {
27 return "Eroare: Timestamp invalid în microsecunde";
28 }
29 } else if (timestampStr.length === 13) {
30 // Precizie în milisecunde
31 const milliseconds = Number(timestampStr);
32 date = new Date(milliseconds);
33 console.log("Se procesează timestamp-ul în milisecunde (13 cifre)");
34
35 // Verificați data invalidă
36 if (isNaN(date.getTime())) {
37 return "Eroare: Timestamp invalid în milisecunde";
38 }
39 } else if (timestampStr.length === 10) {
40 // Timestamp Unix standard (secunde)
41 const seconds = Number(timestampStr);
42 date = new Date(seconds * 1000);
43 console.log("Se procesează timestamp-ul standard (10 cifre)");
44
45 // Verificați data invalidă
46 if (isNaN(date.getTime())) {
47 return "Eroare: Timestamp invalid standard";
48 }
49
50 // Verificați problema Y2K38 (pentru sistemele pe 32 de biți)
51 const maxInt32 = 2147483647; // Valoarea maximă pentru întreg semnat de 32 de biți
52 if (seconds > maxInt32) {
53 console.warn("Atenție: Timestamp-ul depășește limita întregului pe 32 de biți (problema Y2K38)");
54 }
55 } else {
56 return "Eroare: Lungimea timestamp-ului invalidă. Se așteaptă 10, 13 sau 16 cifre.";
57 }
58
59 // Formatați data
60 const options = {
61 year: 'numeric',
62 month: 'long',
63 day: 'numeric',
64 weekday: 'long',
65 hour: use12Hour ? 'numeric' : '2-digit',
66 minute: '2-digit',
67 second: '2-digit',
68 hour12: use12Hour
69 };
70
71 return date.toLocaleString(undefined, options);
72 } catch (error) {
73 return "Eroare la conversia timestamp-ului: " + error.message;
74 }
75}
76
77// Testați cu diverse cazuri limită
78console.log(safeConvertTimestamp("1609459200")); // Standard (10 cifre)
79console.log(safeConvertTimestamp("1609459200000")); // Milisecunde (13 cifre)
80console.log(safeConvertTimestamp("1609459200000000")); // Microsecunde (16 cifre)
81console.log(safeConvertTimestamp("abc123")); // Non-numeric
82console.log(safeConvertTimestamp("12345")); // Lungime invalidă
83console.log(safeConvertTimestamp("9999999999999999")); // Timestamp în microsecunde foarte mare
84console.log(safeConvertTimestamp("")); // Șir gol
85
Întrebări Frecvente
Ce este un timestamp Unix?
Un timestamp Unix este numărul de secunde care au trecut de la 1 ianuarie 1970 (miezul nopții UTC/GMT), fără a lua în considerare secunde intercalare. Oferă o modalitate compactă, independentă de limbaj, de a reprezenta un moment specific în timp.
Cum funcționează detectarea automată a formatului timestamp-ului?
Converterul detectează automat formatul timestamp-ului pe baza numărului de cifre:
- 10 cifre: Timestamp Unix standard (secunde de la epoch)
- 13 cifre: Timestamp de precizie în milisecunde
- 16 cifre: Timestamp de precizie în microsecunde
De ce aș avea nevoie de precizie în milisecunde sau microsecunde?
Precizia în milisecunde (13 cifre) este utilă pentru aplicațiile care necesită un timp mai precis, cum ar fi monitorizarea performanței, urmărirea interacțiunii utilizatorului și anumite aplicații financiare. Precizia în microsecunde (16 cifre) este necesară pentru calculul de înaltă performanță, aplicațiile științifice și sistemele de tranzacții de înaltă frecvență, unde timpul extrem de precis este critic.
Pot folosi timestamps Unix pentru programarea evenimentelor viitoare?
Da, timestamps Unix sunt utilizate pe scară largă pentru programare. Cu toate acestea, pentru date foarte îndepărtate în viitor, fiți conștienți de limitările potențiale, cum ar fi problema Anului 2038 pentru sistemele pe 32 de biți și gestionarea modificărilor de fus orar și tranzițiile de timp de vară.
Ce este problema Anului 2038?
Problema Anului 2038 apare deoarece multe sisteme stochează timestamps Unix ca întregi semnați de 32 de biți, care pot reprezenta doar date până la 19 ianuarie 2038 (03:14:07 UTC). După acest moment, întregul va depăși limita, provocând potențial eșecuri ale sistemului. Sistemele moderne utilizează din ce în ce mai mult întregi de 64 de biți pentru a evita această problemă.
Cum gestionez conversiile de fus orar cu timestamps Unix?
Timestamps Unix sunt întotdeauna în UTC (Timp Universal Coordinat). Pentru a converti într-un fus orar specific, trebuie să aplicați offset-ul corespunzător după ce ați convertit timestamp-ul într-o dată. Cele mai multe limbaje de programare oferă funcții încorporate pentru a gestiona conversiile de fus orar.
Care este diferența dintre timpul Unix și ISO 8601?
Timpul Unix este o reprezentare numerică (secunde de la epoch), în timp ce ISO 8601 este un format de șir (de exemplu, "2021-01-01T00:00:00Z"). Timpul Unix este mai compact și mai ușor de utilizat pentru calcule, în timp ce ISO 8601 este mai ușor de citit de oameni și auto-descriptiv.
Cât de precise sunt timestamps Unix?
Timestamps Unix standard au precizie la nivel de secundă. Pentru aplicațiile care necesită o precizie mai mare, timestamps în milisecunde (13 cifre) oferă precizie de 1/1000 de secundă, iar timestamps în microsecunde (16 cifre) oferă precizie de 1/1,000,000 de secundă.
Timestamps Unix țin cont de secunde intercalare?
Nu, timpul Unix este definit ca numărul de secunde de la epoch, excluzând secunde intercalare. Aceasta înseamnă că, în timpul unei secunde intercalare, timestamp-ul Unix nu se incrementează. Acest lucru poate cauza probleme în aplicațiile care necesită un timp astronomic precis.
Există alternative la timestamps Unix?
Da, există alternative la timestamps Unix, cum ar fi ISO 8601, RFC 3339, și formatele de date ușor de citit de oameni. Alegerea formatului de timp depinde de contextul aplicației și de cerințele specifice.
Referințe
-
"Timp Unix." Wikipedia, Fundația Wikimedia, https://en.wikipedia.org/wiki/Unix_time
-
"Problema Anului 2038." Wikipedia, Fundația Wikimedia, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "Complexitățile Timpului Calendaristic." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." Wikipedia, Fundația Wikimedia, https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: Data și Timp pe Internet: Timestamps." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., și Dennis M. Ritchie. "Limbajul de Programare C." Prentice Hall, 1988.
-
"Timpul de Precizie în Calculul de Înaltă Performanță." ACM Computing Surveys, https://dl.acm.org/doi/10.1145/3232678
-
"Reprezentarea Timpului în Sistemele Financiare." Journal of Financial Technology, https://www.fintech-journal.com/time-representation
Încercați acum converterul nostru de timestamp pentru a converti cu ușurință timestamps Unix de orice precizie în date ușor de citit. Indiferent dacă lucrați cu timestamps Unix standard, în milisecunde sau în microsecunde, instrumentul nostru detectează automat formatul și oferă conversii precise.
Feedback
Faceți clic pe toast-ul de feedback pentru a începe să oferiți feedback despre această unealtă
Instrumente conexe
Descoperiți mai multe instrumente care ar putea fi utile pentru fluxul dvs. de lucru