Whiz Tools

Unix Timestampi Konverter

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

Muudetud Kuupäev ja Aeg

Unix Timestamp Converter

Sissejuhatus

Unix timestamp (tuntud ka kui POSIX aeg või Epoch aeg) on süsteem ajapunkti kirjeldamiseks. See on sekundite arv, mis on möödunud 1. jaanuarist 1970 (kes öö UTC/GMT), arvestamata lisasekundeid. Unix timestamp'e kasutatakse laialdaselt arvutisüsteemides ja programmeerimiskeeltes, kuna need pakuvad kompaktset, keele sõltumatut esitamist kindlast ajamomendist.

See konverter võimaldab teil muuta Unix timestamp'i inimloetavasse kuupäeva ja kellaaja formaati. See toetab nii 12-tunnist (AM/PM) kui ka 24-tunnist ajavormingut, et arvestada erinevaid piirkondlikke ja isiklikke eelistusi.

Kuidas Unix Timestamp'id Töötavad

Unix timestamp'id arvutatakse kui sekundite arv alates Unix Epoch'ist (1. jaanuar 1970, 00:00:00 UTC). See teeb neist eriti kasulikud ajavahemike arvutamiseks ja kuupäevade kompaktseks salvestamiseks.

Matemaatiline konversioon Unix timestamp'ist kalendriaega hõlmab mitmeid samme:

  1. Alustage Unix Epoch'ist (1. jaanuar 1970, 00:00:00 UTC)
  2. Lisage timestamp'is olevate sekundite arv
  3. Arvestage liigaastaid, erinevaid kuupäeva pikkusi ja muid kalendri keerukusi
  4. Rakendage vajadusel ajavööndi kohandusi

Näiteks Unix timestamp 1609459200 tähistab reede, 1. jaanuar 2021, 00:00:00 UTC.

Konversioonivalemit saab väljendada järgmiselt:

Kuupa¨ev=Unix Epoch+Timestamp (sekundites)\text{Kuupäev} = \text{Unix Epoch} + \text{Timestamp (sekundites)}

Enamik programmeerimiskeeli ja operatsioonisüsteeme pakuvad sisseehitatud funktsioone selle konversiooni käsitlemiseks, varjates keerulisi kalendriarvutusi.

Aja Vormindamise Valikud

See konverter pakub kahte ajavormingu valikut:

  1. 24-tunnine formaat (mõnikord nimetatakse "sõjaväe ajaks"): Tunnid ulatuvad vahemikku 0 kuni 23, ning AM/PM tähistust ei ole. Näiteks 15:00 tähistab 3:00 PM.

  2. 12-tunnine formaat: Tunnid ulatuvad vahemikku 1 kuni 12, AM (ante meridiem) ajad on keskööst kuni keskpäevani, ja PM (post meridiem) ajad on keskpäevast kesööni. Näiteks 15:00 24-tunnises formaadis on esitatud kui 3:00 PM.

Valik nende vormingute vahel on suuresti piirkondlike tavade ja isiklike eelistuste küsimus:

  • 24-tunnist formaati kasutatakse laialdaselt enamikus Euroopas, Ladina-Ameerikas ja Aasias, samuti teaduslikes, sõjaväelistes ja meditsiinilistes kontekstides üle kogu maailma.
  • 12-tunnine formaat on levinud Ameerika Ühendriikides, Kanadas, Austraalias ja mõnedes teistes ingliskeelsetes riikides igapäevases kasutuses.

Äärmuslikud Juhud ja Piirangud

Unix timestamp'idega töötamisel on oluline olla teadlik mitmetest äärmuslikest juhtudest ja piirangutest:

  1. Negatiivsed timestamp'id: Need tähistavad kuupäevi enne Unix Epoch'i (1. jaanuar 1970). Kuigi matemaatiliselt kehtivad, ei pruugi mõned süsteemid negatiivseid timestamp'e õigesti käsitleda.

  2. Aasta 2038 probleem: Unix timestamp'e salvestatakse sageli kui 32-bitised allkirjastatud täisarvud, mis ületavad 19. jaanuaril 2038. Ajal, mil 32-bitised süsteemid ei suuda aegu õigesti esindada, kui neid ei muudetud suurema täisarvu tüübi kasutamiseks.

  3. Äärmiselt suured timestamp'id: Väga kauged tuleviku kuupäevad ei pruugi mõnedes süsteemides olla esitatavad või võivad neid käsitleda ebaühtlaselt.

  4. Lisasekundid: Unix aeg ei arvestata lisasekundeid, mis lisatakse UTC-sse, et kompenseerida Maa ebaühtlast pöörlemist. See tähendab, et Unix aeg ei ole täpselt sünkroonitud astronoomilise ajaga.

  5. Ajavööndi kaalutlused: Unix timestamp'id esindavad hetki UTC-s. Kohalikku aega konverteerimiseks on vajalik täiendav ajavööndi teave.

  6. Suveaja: Timestamp'ide konverteerimisel kohalikku aega tuleb arvesse võtta suveaja üleminekute keerukusi.

Kasutusalad

Unix timestamp'e kasutatakse paljudes rakendustes arvutamise ja andmehalduse valdkonnas:

  1. Andmebaasi Kirjed: Timestamp'e kasutatakse sageli selleks, et registreerida, millal kirjed loodi või muudeti.

  2. Veebiarendus: HTTP päised, küpsised ja vahemälu mehhanismid kasutavad sageli Unix timestamp'e.

  3. Logifailid: Süsteemi logid registreerivad tavaliselt sündmusi Unix timestamp'idega, et tagada täpne kronoloogiline järjestus.

  4. Versioonihaldussüsteemid: Git ja teised VCS kasutavad timestamp'e, et registreerida, millal commit'id tehti.

  5. API Vastused: Paljud veeb API-d sisaldavad oma vastustes timestamp'e, et näidata, millal andmed genereeriti või millal ressursse viimati muudeti.

  6. Failisüsteemid: Failide loomise ja muutmise ajad salvestatakse sageli Unix timestamp'idena.

  7. Seansi Halduse: Veebirakendused kasutavad timestamp'e, et määrata, millal kasutaja seansid peaksid aeguma.

  8. Andmeanalüüs: Timestamp'id pakuvad standardiseeritud viisi ajalisest andmestikust töötamiseks analüütika rakendustes.

Alternatiivid

Kuigi Unix timestamp'id on laialdaselt kasutusel, on olemas alternatiivsed aj esitamisse vormingud, mis võivad teatud kontekstides olla sobivamad:

  1. ISO 8601: Standardiseeritud stringiformaat (nt "2021-01-01T00:00:00Z"), mis on inimloetav, säilitades samas sorteeritavuse. Seda eelistatakse sageli andmevahetuses ja kasutajaliidese rakendustes.

  2. RFC 3339: ISO 8601 profiil, mida kasutatakse interneti protokollides, rangemate vormindamisnõuetega.

  3. Inimloetavad vormingud: Lokaliseeritud kuupäeva stringid (nt "1. jaanuar 2021") on otsese kasutajaga suhtlemiseks sobivamad, kuid vähem sobivad arvutamiseks.

  4. Microsoft FILETIME: 64-bitine väärtus, mis esindab 100-nanosekundiliste intervallide arvu alates 1. jaanuarist 1601, mida kasutatakse Windows süsteemides.

  5. Juliani Päevanumber: Kasutatakse astronoomias ja mõnedes teaduslikes rakendustes, loendades päevi alates 1. jaanuarist 4713 eKr.

Ajavormingu valik sõltub sellistest teguritest nagu:

  • Vajalik täpsus
  • Inimloetavuse vajadused
  • Salvestuspiirangud
  • Ühilduvus olemasolevate süsteemidega
  • Kuupäevade vahemik, mida tuleb esindada

Ajalugu

Unix aja kontseptsioon sai alguse Unix operatsioonisüsteemi arendamisest Bell Labs'is 1960ndate ja 1970ndate alguses. Otsus kasutada 1. jaanuari 1970 kui epoch oli mõnevõrra meelevaldne, kuid praktiline tol ajal - see oli piisavalt hiline, et minimeerida huvipakkuvate kuupäevade salvestusnõudeid, kuid piisavalt kaugel minevikus, et olla kasulik ajalooliste andmete jaoks.

Algne rakendus kasutas 32-bitist allkirjastatud täisarvu, et salvestada sekundite arvu, mis oli piisav Unix süsteemide oodatava eluea jaoks tol ajal. Kuid see otsus viis Aasta 2038 probleemini (mõnikord nimetatakse "Y2K38" või "Unixi aastatuhande viga"), kuna 32-bitised allkirjastatud täisarvud suudavad esindada kuupäevi kuni 19. jaanuarini 2038 (03:14:07 UTC).

Kuna Unix ja Unix-sarnased operatsioonisüsteemid said populaarsust, muutus Unix timestamp de facto standardiks aja esitlemiseks arvutites. Seda võtsid kasutusele paljud programmeerimiskeeled, andmebaasid ja rakendused, ulatudes kaugemale oma algsest Unix keskkonnast.

Kaasaegsed süsteemid kasutavad üha enam 64-bitiseid täisarve timestamp'ide jaoks, mis pikendab esitatava vahemiku umbes 292 miljardi aasta võrra mõlemas suunas epoch'ist, lahendades tõhusalt Aasta 2038 probleemi. Kuid pärand süsteemid ja rakendused võivad endiselt olla haavatavad.

Unix timestamp'i lihtsus ja kasulikkus on taganud selle jätkuva tähtsuse vaatamata keerukamate ajas esitlemise vormingute arengule. See jääb arvutamise aluseks, toetades suurt osa meie digitaalsest infrastruktuurist.

Koodi Näited

Siin on näited, kuidas konverteerida Unix timestamp'e inimloetavatesse kuupäevadesse erinevates programmeerimiskeeltes:

// JavaScript timestamp'i konversioon
function convertUnixTimestamp(timestamp, use12Hour = false) {
  // Looge uus Date objekt (JavaScript kasutab millisekundeid)
  const date = new Date(timestamp * 1000);
  
  // Vormindamisvalikud
  const options = {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    weekday: 'long',
    hour: use12Hour ? 'numeric' : '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: use12Hour
  };
  
  // Muutke stringiks, kasutades lokaalset vormindamist
  return date.toLocaleString(undefined, options);
}

// Näite kasutamine
const timestamp = 1609459200; // 1. jaanuar 2021 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // 24-tunnine formaat
console.log(convertUnixTimestamp(timestamp, true));  // 12-tunnine formaat
# Python timestamp'i konversioon
import datetime

def convert_unix_timestamp(timestamp, use_12hour=False):
    # Muutke Unix timestamp datetime objektiks
    date = datetime.datetime.fromtimestamp(timestamp)
    
    # Vormindage kuupäeva string
    if use_12hour:
        format_string = "%A, %B %d, %Y %I:%M:%S %p"  # 12-tunnine formaat AM/PM
    else:
        format_string = "%A, %B %d, %Y %H:%M:%S"     # 24-tunnine formaat
    
    return date.strftime(format_string)

# Näite kasutamine
timestamp = 1609459200  # 1. jaanuar 2021 00:00:00 UTC
print(convert_unix_timestamp(timestamp, False))  # 24-tunnine formaat
print(convert_unix_timestamp(timestamp, True))   # 12-tunnine formaat
<?php
// PHP timestamp'i konversioon
function convertUnixTimestamp($timestamp, $use12Hour = false) {
    // Vormindamisstring
    $formatString = $use12Hour 
        ? 'l, F j, Y g:i:s A'  // 12-tunnine formaat AM/PM
        : 'l, F j, Y H:i:s';   // 24-tunnine formaat
    
    // Muutke ja vormindage kuupäev
    return date($formatString, $timestamp);
}

// Näite kasutamine
$timestamp = 1609459200; // 1. jaanuar 2021 00:00:00 UTC
echo convertUnixTimestamp($timestamp, false) . "\n"; // 24-tunnine formaat
echo convertUnixTimestamp($timestamp, true) . "\n";  // 12-tunnine formaat
?>
// Java timestamp'i konversioon
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) {
        // Muutke Unix timestamp Instant'iks, seejärel LocalDateTime'iks
        Instant instant = Instant.ofEpochSecond(timestamp);
        LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        
        // Looge vormindaja soovitud vormingu põhjal
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
        );
        
        // Vormindage kuupäev
        return dateTime.format(formatter);
    }
    
    public static void main(String[] args) {
        long timestamp = 1609459200; // 1. jaanuar 2021 00:00:00 UTC
        System.out.println(convertUnixTimestamp(timestamp, false)); // 24-tunnine formaat
        System.out.println(convertUnixTimestamp(timestamp, true));  // 12-tunnine formaat
    }
}
// C# timestamp'i konversioon
using System;

class UnixTimestampConverter
{
    public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
    {
        // Muutke Unix timestamp DateTime'iks
        // Unix timestamp on sekundid alates 1970-01-01
        DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
        
        // Vormindamisstring 12-tunnise või 24-tunnise eelistuse põhjal
        string formatString = use12Hour 
            ? "dddd, MMMM d, yyyy h:mm:ss tt"  // 12-tunnine formaat AM/PM
            : "dddd, MMMM d, yyyy HH:mm:ss";   // 24-tunnine formaat
        
        // Tagastage vormindatud kuupäev
        return dateTime.ToString(formatString);
    }
    
    static void Main()
    {
        long timestamp = 1609459200; // 1. jaanuar 2021 00:00:00 UTC
        Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // 24-tunnine formaat
        Console.WriteLine(ConvertUnixTimestamp(timestamp, true));  // 12-tunnine formaat
    }
}
# Ruby timestamp'i konversioon
require 'time'

def convert_unix_timestamp(timestamp, use_12hour = false)
  # Muutke Unix timestamp Time objektiks
  time = Time.at(timestamp)
  
  # Vormindage 12-tunnise või 24-tunnise eelistuse põhjal
  if use_12hour
    time.strftime("%A, %B %d, %Y %I:%M:%S %p")  # 12-tunnine formaat AM/PM
  else
    time.strftime("%A, %B %d, %Y %H:%M:%S")     # 24-tunnine formaat
  end
end

# Näite kasutamine
timestamp = 1609459200  # 1. jaanuar 2021 00:00:00 UTC
puts convert_unix_timestamp(timestamp, false)  # 24-tunnine formaat
puts convert_unix_timestamp(timestamp, true)   # 12-tunnine formaat
// Go timestamp'i konversioon
package main

import (
    "fmt"
    "time"
)

func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
    // Muutke Unix timestamp Time'iks
    t := time.Unix(timestamp, 0)
    
    // Vormindamisstring 12-tunnise või 24-tunnise eelistuse põhjal
    formatString := "Monday, January 2, 2006 "
    if use12Hour {
        formatString += "3:04:05 PM"  // 12-tunnine formaat AM/PM
    } else {
        formatString += "15:04:05"    // 24-tunnine formaat
    }
    
    // Tagastage vormindatud aeg
    return t.Format(formatString)
}

func main() {
    timestamp := int64(1609459200) // 1. jaanuar 2021 00:00:00 UTC
    fmt.Println(convertUnixTimestamp(timestamp, false)) // 24-tunnine formaat
    fmt.Println(convertUnixTimestamp(timestamp, true))  // 12-tunnine formaat
}
// Swift timestamp'i konversioon
import Foundation

func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
    // Looge kuupäev Unix timestamp'ist
    let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
    
    // Looge DateFormatter
    let formatter = DateFormatter()
    formatter.dateStyle = .full
    
    // Seadke ajastiil 12-tunnise või 24-tunnise eelistuse põhjal
    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")
    }
    
    // Tagastage vormindatud kuupäev
    return formatter.string(from: date)
}

// Näite kasutamine
let timestamp = 1609459200 // 1. jaanuar 2021 00:00:00 UTC
print(convertUnixTimestamp(timestamp, use12Hour: false)) // 24-tunnine formaat
print(convertUnixTimestamp(timestamp, use12Hour: true))  // 12-tunnine formaat
# R timestamp'i konversioon
convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
  # Muutke Unix timestamp POSIXct datetime'ks
  date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
  
  # Vormindage 12-tunnise või 24-tunnise eelistuse põhjal
  if (use_12hour) {
    format_string <- "%A, %B %d, %Y %I:%M:%S %p"  # 12-tunnine formaat AM/PM
  } else {
    format_string <- "%A, %B %d, %Y %H:%M:%S"     # 24-tunnine formaat
  }
  
  # Tagastage vormindatud kuupäeva string
  format(date_time, format_string)
}

# Näite kasutamine
timestamp <- 1609459200  # 1. jaanuar 2021 00:00:00 UTC
cat(convert_unix_timestamp(timestamp, FALSE), "\n")  # 24-tunnine formaat
cat(convert_unix_timestamp(timestamp, TRUE), "\n")   # 12-tunnine formaat
% MATLAB timestamp'i konversioon
function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
    % Muutke Unix timestamp MATLAB datetime'iks
    % MATLAB kuupäevad on päevad alates 1900-01-01, kus 1 = 1900-01-01
    % Unix timestamp'id on sekundid alates 1970-01-01
    
    % Esiteks konverteerige Exceli kuupäeva formaati
    % 25569 on päevade arv 1900-01-01 ja 1970-01-01 vahel
    excelDate = (timestamp / 86400) + 25569;
    
    % Vormindage kuupäev 12-tunnise või 24-tunnise eelistuse põhjal
    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

% Näite kasutamine
timestamp = 1609459200;  % 1. jaanuar 2021 00:00:00 UTC
disp(convertUnixTimestamp(timestamp, false))  % 24-tunnine formaat
disp(convertUnixTimestamp(timestamp, true))   % 12-tunnine formaat
' Excel VBA timestamp'i konversioon
Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
    ' Muutke Unix timestamp Exceli kuupäeva/aega
    ' Exceli kuupäevad on päevad alates 1900-01-01, kus 1 = 1900-01-01
    ' Unix timestamp'id on sekundid alates 1970-01-01
    
    ' Esiteks konverteerige Exceli kuupäeva formaati
    ' 25569 on päevade arv 1900-01-01 ja 1970-01-01 vahel
    Dim excelDate As Double
    excelDate = (timestamp / 86400) + 25569
    
    ' Vormindage kuupäev 12-tunnise või 24-tunnise eelistuse põhjal
    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

' Kasutamine töölehe sees:
' =ConvertUnixTimestamp(1609459200, TRUE)  ' 12-tunnine formaat
' =ConvertUnixTimestamp(1609459200, FALSE) ' 24-tunnine formaat

Äärmuslike Juhtude Käsitlemine

Unix timestamp'idega töötamisel on oluline õigesti käsitleda äärmuslikke juhtumeid. Siin on näited, kuidas käsitleda mõningaid levinud äärmuslikke juhtumeid:

// JavaScript äärmuslike juhtumite käsitlemine
function safeConvertTimestamp(timestamp, use12Hour = false) {
  // Kontrollige, kas timestamp on kehtiv
  if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
    return "Kehtetu timestamp";
  }
  
  // Kontrollige negatiivseid timestamp'e (kuupäevad enne 1970)
  if (timestamp < 0) {
    // Mõned brauserid ei pruugi negatiivseid timestamp'e õigesti käsitleda
    // Kasutage enne 1970. aastat kindlamat lähenemist
    const date = new Date(timestamp * 1000);
    if (isNaN(date.getTime())) {
      return "Kehtetu kuupäev (enne 1970)";
    }
  }
  
  // Kontrollige Y2K38 probleemi (32-bitiste süsteemide jaoks)
  const maxInt32 = 2147483647; // 32-bitise allkirjastatud täisarvu maksimaalne väärtus
  if (timestamp > maxInt32) {
    // Kaaluge BigInt'i kasutamist väga suurte timestamp'ide jaoks kaasaegses JavaScriptis
    console.warn("Timestamp ületab 32-bitise täisarvu piiri (Y2K38 probleem)");
  }
  
  // Jätkake normaalse konversiooniga
  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 "Viga timestamp'i konverteerimisel: " + error.message;
  }
}

Viidatud Allikad

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

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

  3. Olson, Arthur David. "Kalendriaja Keerukused." 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: Interneti Aja ja Kuupäeva Templid." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339

  6. Kernighan, Brian W., ja Dennis M. Ritchie. "C Programmeerimiskeel." Prentice Hall, 1988.

Feedback