Whiz Tools

Converter de Timestamp Unix

ইউনিক্স টাইমস্ট্যাম্প হল 1 জানুয়ারী, 1970 (UTC) থেকে পেরিয়ে যাওয়া সেকেন্ডের সংখ্যা

Data și Ora Convertită

Convertor de Timestamp Unix

Introducere

Un timestamp Unix (cunoscut și sub numele de timp POSIX sau timp Epoch) este un sistem pentru descrierea unui punct î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 convertor vă permite să transformați un timestamp Unix într-un format de dată și oră ușor de citit. Suportă atât formatul 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 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:

  1. Începeți cu Epoch Unix (1 ianuarie 1970, 00:00:00 UTC)
  2. Adăugați numărul de secunde din timestamp
  3. Luați în considerare anii bisecți, lungimile variate ale lunilor și alte complexități ale calendarului
  4. Aplicați ajustările de fus orar, dacă este necesar

De exemplu, timestampul Unix 1609459200 reprezintă vineri, 1 ianuarie 2021, 00:00:00 UTC.

Formula de conversie poate fi exprimată ca:

Data=Epoch Unix+Timestamp (ıˆn secunde)\text{Data} = \text{Epoch Unix} + \text{Timestamp (în secunde)}

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.

Opțiuni de Format pentru Timp

Acest convertor oferă două opțiuni de format pentru timp:

  1. Format de 24 de ore (cunoscut și sub numele de "timp militar"): Orele variază de la 0 la 23, iar nu există denumirea AM/PM. De exemplu, 15:00 este reprezentat ca 15:00.

  2. 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 parte o chestiune de convenție regională și preferință personală:

  • Formatul de 24 de ore este utilizat în mod obișnuit în cea mai mare parte a 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 limbă engleză pentru utilizarea de zi cu zi.

Cazuri Limite și Limitări

Atunci când lucrați cu timestamps Unix, este important să fiți conștienți de mai multe cazuri limită și limitări:

  1. Timestamps negative: Acestea reprezintă date înainte de Epoch Unix (1 ianuarie 1970). Deși sunt valide din punct de vedere matematic, unele sisteme s-ar putea să nu gestioneze corect timestamps negative.

  2. Problema Anului 2038: Timestamps Unix sunt adesea stocate ca întregi semnați de 32 de biți, care vor depăși limita pe 19 ianuarie 2038. După acest punct, sistemele pe 32 de biți nu vor putea reprezenta corect timpii decât dacă sunt modificate pentru a utiliza un tip de întreg mai mare.

  3. Timestamps extrem de mari: Datele foarte îndepărtate în viitor pot să nu fie reprezentabile în unele sisteme sau pot fi gestionate inconsistent.

  4. 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. Acest lucru înseamnă că timpul Unix nu este sincronizat precis cu timpul astronomic.

  5. Considerații de fus orar: Timestamps Unix reprezintă momente în UTC. Conversia la ora locală necesită informații suplimentare despre fusul orar.

  6. Ora de vară: Atunci când se convertește timestamps în ora locală, trebuie luate în considerare complexitățile tranzițiilor de ora de vară.

Cazuri de Utilizare

Timestamps Unix sunt utilizate în numeroase aplicații în domeniul informatic și gestionarea datelor:

  1. Înregistrări de baze de date: Timestamps sunt folosite frecvent pentru a înregistra când au fost create sau modificate intrările.

  2. Dezvoltare web: Header-ele HTTP, cookie-urile și mecanismele de cache folosesc adesea timestamps Unix.

  3. Fișiere de jurnal: Jurnalele de sistem înregistrează de obicei evenimente cu timestamps Unix pentru o ordonare cronologică precisă.

  4. Sisteme de control al versiunilor: Git și alte VCS folosesc timestamps pentru a înregistra când au fost efectuate commit-uri.

  5. 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 resursele au fost modificate ultima dată.

  6. Sisteme de fișiere: Timpurile de creare și modificare a fișierelor sunt adesea stocate ca timestamps Unix.

  7. Gestionarea sesiunilor: Aplicațiile web folosesc timestamps pentru a determina când sesiunile utilizatorilor ar trebui să expire.

  8. Analiza datelor: Timestamps oferă o modalitate standardizată de a lucra cu date temporale în aplicațiile de analiză.

Alternative

Deși timestamps Unix sunt utilizate pe scară largă, există formate alternative de reprezentare a timpului care pot fi mai adecvate în anumite contexte:

  1. ISO 8601: Un format de șir standardizat (de exemplu, "2021-01-01T00:00:00Z") care este ușor de citit de oameni, păstrând în același timp sortabilitatea. Este adesea preferat pentru schimbul de date și aplicațiile orientate către utilizatori.

  2. RFC 3339: Un profil al ISO 8601 utilizat în protocoalele de internet, cu cerințe de formatare mai stricte.

  3. Formate ușor de citit: Șirurile de date localizate (de exemplu, "1 ianuarie 2021") sunt mai adecvate pentru interacțiunea directă cu utilizatorul, dar sunt mai puțin potrivite pentru calcul.

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

  5. Numărul de zi iulian: 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 citire 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 în 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 îndepărtată î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șteptate 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 (03:14:07 UTC).

Pe măsură ce Unix și sistemele Unix-like au câștigat popularitate, timestampul Unix a devenit un standard de facto pentru reprezentarea timpului în informatică. 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 folosesc 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 legacy pot fi încă vulnerabile.

Simplitatea și utilitatea timestampului 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 informatică, stând la baza unei mari părți a infrastructurii noastre digitale.

Exemple de Cod

Iată exemple de cum să convertiți timestamps Unix în date ușor de citit în diferite limbaje de programare:

// Conversia timestamp-ului în JavaScript
function convertUnixTimestamp(timestamp, use12Hour = false) {
  // Creați un nou obiect Date (JavaScript folosește milisecunde)
  const date = new Date(timestamp * 1000);
  
  // Opțiuni de formatare
  const options = {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    weekday: 'long',
    hour: use12Hour ? 'numeric' : '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: use12Hour
  };
  
  // Convertiți în șir folosind formatarea locală
  return date.toLocaleString(undefined, options);
}

// Exemplu de utilizare
const timestamp = 1609459200; // 1 ianuarie 2021 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // Format de 24 de ore
console.log(convertUnixTimestamp(timestamp, true));  // Format de 12 ore
# Conversia timestamp-ului în Python
import datetime

def convert_unix_timestamp(timestamp, use_12hour=False):
    # Convertiți timestamp-ul Unix în obiect datetime
    date = datetime.datetime.fromtimestamp(timestamp)
    
    # Formatați șirul de dată
    if use_12hour:
        format_string = "%A, %B %d, %Y %I:%M:%S %p"  # Format de 12 ore cu AM/PM
    else:
        format_string = "%A, %B %d, %Y %H:%M:%S"     # Format de 24 de ore
    
    return date.strftime(format_string)

# Exemplu de utilizare
timestamp = 1609459200  # 1 ianuarie 2021 00:00:00 UTC
print(convert_unix_timestamp(timestamp, False))  # Format de 24 de ore
print(convert_unix_timestamp(timestamp, True))   # Format de 12 ore
<?php
// Conversia timestamp-ului în PHP
function convertUnixTimestamp($timestamp, $use12Hour = false) {
    // Șir de formatare
    $formatString = $use12Hour 
        ? 'l, F j, Y g:i:s A'  // Format de 12 ore cu AM/PM
        : 'l, F j, Y H:i:s';   // Format de 24 de ore
    
    // Convertiți și formatați data
    return date($formatString, $timestamp);
}

// Exemplu de utilizare
$timestamp = 1609459200; // 1 ianuarie 2021 00:00:00 UTC
echo convertUnixTimestamp($timestamp, false) . "\n"; // Format de 24 de ore
echo convertUnixTimestamp($timestamp, true) . "\n";  // Format de 12 ore
?>
// Conversia timestamp-ului în Java
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

public class UnixTimestampConverter {
    public static String convertUnixTimestamp(long timestamp, boolean use12Hour) {
        // Convertiți timestamp-ul Unix în Instant, apoi în LocalDateTime
        Instant instant = Instant.ofEpochSecond(timestamp);
        LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        
        // Creați formator în funcție de formatul dorit
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
        );
        
        // Formatați data
        return dateTime.format(formatter);
    }
    
    public static void main(String[] args) {
        long timestamp = 1609459200; // 1 ianuarie 2021 00:00:00 UTC
        System.out.println(convertUnixTimestamp(timestamp, false)); // Format de 24 de ore
        System.out.println(convertUnixTimestamp(timestamp, true));  // Format de 12 ore
    }
}
// Conversia timestamp-ului în C#
using System;

class UnixTimestampConverter
{
    public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
    {
        // Convertiți timestamp-ul Unix în DateTime
        // Timpul Unix este în secunde de la 1970-01-01
        DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
        
        // Șir de formatare bazat pe preferința de 12 ore sau 24 de ore
        string formatString = use12Hour 
            ? "dddd, MMMM d, yyyy h:mm:ss tt"  // Format de 12 ore cu AM/PM
            : "dddd, MMMM d, yyyy HH:mm:ss";   // Format de 24 de ore
        
        // Returnați șirul de dată formatat
        return dateTime.ToString(formatString);
    }
    
    static void Main()
    {
        long timestamp = 1609459200; // 1 ianuarie 2021 00:00:00 UTC
        Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // Format de 24 de ore
        Console.WriteLine(ConvertUnixTimestamp(timestamp, true));  // Format de 12 ore
    }
}
# Conversia timestamp-ului în Ruby
require 'time'

def convert_unix_timestamp(timestamp, use_12hour = false)
  # Convertiți timestamp-ul Unix în obiect Time
  time = Time.at(timestamp)
  
  # Formatați în funcție de preferința de 12 ore sau 24 de ore
  if use_12hour
    time.strftime("%A, %B %d, %Y %I:%M:%S %p")  # Format de 12 ore cu AM/PM
  else
    time.strftime("%A, %B %d, %Y %H:%M:%S")     # Format de 24 de ore
  end
end

# Exemplu de utilizare
timestamp = 1609459200  # 1 ianuarie 2021 00:00:00 UTC
puts convert_unix_timestamp(timestamp, false)  # Format de 24 de ore
puts convert_unix_timestamp(timestamp, true)   # Format de 12 ore
// Conversia timestamp-ului în Go
package main

import (
    "fmt"
    "time"
)

func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
    // Convertiți timestamp-ul Unix în Time
    t := time.Unix(timestamp, 0)
    
    // Șir de formatare bazat pe preferința de 12 ore sau 24 de ore
    formatString := "Monday, January 2, 2006 "
    if use12Hour {
        formatString += "3:04:05 PM"  // Format de 12 ore cu AM/PM
    } else {
        formatString += "15:04:05"    // Format de 24 de ore
    }
    
    // Returnați timpul formatat
    return t.Format(formatString)
}

func main() {
    timestamp := int64(1609459200) // 1 ianuarie 2021 00:00:00 UTC
    fmt.Println(convertUnixTimestamp(timestamp, false)) // Format de 24 de ore
    fmt.Println(convertUnixTimestamp(timestamp, true))  // Format de 12 ore
}
// Conversia timestamp-ului în Swift
import Foundation

func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
    // Creați Date din timestamp-ul Unix
    let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
    
    // Creați DateFormatter
    let formatter = DateFormatter()
    formatter.dateStyle = .full
    
    // Setează stilul timpului în funcție de preferința de 12 ore sau 24 de ore
    if use12Hour {
        formatter.timeStyle = .medium
        formatter.amSymbol = "AM"
        formatter.pmSymbol = "PM"
    } else {
        formatter.timeStyle = .medium
        formatter.dateFormat = formatter.dateFormat?.replacingOccurrences(of: "h:mm:ss a", with: "HH:mm:ss")
    }
    
    // Returnați data formatată
    return formatter.string(from: date)
}

// Exemplu de utilizare
let timestamp = 1609459200 // 1 ianuarie 2021 00:00:00 UTC
print(convertUnixTimestamp(timestamp, use12Hour: false)) // Format de 24 de ore
print(convertUnixTimestamp(timestamp, use12Hour: true))  // Format de 12 ore
# Conversia timestamp-ului în R
convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
  # Convertiți timestamp-ul Unix în datetime POSIXct
  date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
  
  # Formatați în funcție de preferința de 12 ore sau 24 de ore
  if (use_12hour) {
    format_string <- "%A, %B %d, %Y %I:%M:%S %p"  # Format de 12 ore cu AM/PM
  } else {
    format_string <- "%A, %B %d, %Y %H:%M:%S"     # Format de 24 de ore
  }
  
  # Returnați șirul de dată formatat
  format(date_time, format_string)
}

# Exemplu de utilizare
timestamp <- 1609459200  # 1 ianuarie 2021 00:00:00 UTC
cat(convert_unix_timestamp(timestamp, FALSE), "\n")  # Format de 24 de ore
cat(convert_unix_timestamp(timestamp, TRUE), "\n")   # Format de 12 ore
% Conversia timestamp-ului în MATLAB
function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
    % Convertiți timestamp-ul Unix în datetime MATLAB
    % Datele Excel sunt zile de la 1900-01-01, cu 1 = 1900-01-01
    % Timpul Unix este în secunde de la 1970-01-01
    
    % Mai întâi convertiți în format de dată Excel
    % 25569 este numărul de zile între 1900-01-01 și 1970-01-01
    excelDate = (timestamp / 86400) + 25569;
    
    % Formatați în funcție de preferința de 12 ore sau 24 de ore
    if use12Hour
        formattedDate = datestr(excelDate, 'dddd, mmmm d, yyyy h:mm:ss AM/PM');
    else
        formattedDate = datestr(excelDate, 'dddd, mmmm d, yyyy hh:mm:ss');
    end
end

% Exemplu de utilizare
timestamp = 1609459200;  % 1 ianuarie 2021 00:00:00 UTC
disp(convertUnixTimestamp(timestamp, false))  % Format de 24 de ore
disp(convertUnixTimestamp(timestamp, true))   % Format de 12 ore
' Conversia timestamp-ului în Excel VBA
Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
    ' Convertiți timestamp-ul Unix în dată/oră Excel
    ' Datele Excel sunt zile de la 1900-01-01, cu 1 = 1900-01-01
    ' Timpul Unix este în secunde de la 1970-01-01
    
    ' Mai întâi convertiți în format de dată Excel
    ' 25569 este numărul de zile între 1900-01-01 și 1970-01-01
    Dim excelDate As Double
    excelDate = (timestamp / 86400) + 25569
    
    ' Formatați data în funcție de preferința de 12 ore sau 24 de ore
    If use12Hour Then
        ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy h:mm:ss AM/PM")
    Else
        ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy hh:mm:ss")
    End If
End Function

' Utilizare într-o foaie de lucru:
' =ConvertUnixTimestamp(1609459200, TRUE)  ' Format de 12 ore
' =ConvertUnixTimestamp(1609459200, FALSE) ' Format de 24 de ore

Gestionarea Cazurilor Limite

Atunci când lucrați cu timestamps Unix, este important să gestionați corect cazurile limită. Iată exemple de gestionare a unor cazuri limită comune:

// Gestionarea cazurilor limită în JavaScript
function safeConvertTimestamp(timestamp, use12Hour = false) {
  // Verificați dacă timestamp-ul este valid
  if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
    return "Timestamp invalid";
  }
  
  // Verificați pentru timestamps negative (date înainte de 1970)
  if (timestamp < 0) {
    // Unele browsere s-ar putea să nu gestioneze corect timestamps negative
    // Folosiți o abordare mai robustă pentru datele înainte de 1970
    const date = new Date(timestamp * 1000);
    if (isNaN(date.getTime())) {
      return "Dată invalidă (înainte de 1970)";
    }
  }
  
  // Verificați pentru problema Y2K38 (pentru sisteme de 32 de biți)
  const maxInt32 = 2147483647; // Valoarea maximă pentru întreg semnat de 32 de biți
  if (timestamp > maxInt32) {
    // Luați în considerare utilizarea BigInt pentru timestamps foarte mari în JavaScript modern
    console.warn("Timestamp-ul depășește limita întregului de 32 de biți (problemă Y2K38)");
  }
  
  // Continuați cu conversia 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 "Eroare la conversia timestamp-ului: " + error.message;
  }
}

Referințe

  1. "Timp Unix." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time

  2. "Problema Anului 2038." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem

  3. Olson, Arthur David. "Complexitățile Timpului Calendaristic." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf

  4. "ISO 8601." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/ISO_8601

  5. "RFC 3339: Data și Timp pe Internet: Timestamps." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339

  6. Kernighan, Brian W., și Dennis M. Ritchie. "Limbajul de Programare C." Prentice Hall, 1988.

Feedback