Whiz Tools

Konverter Unix vremenskog oznaka

Unix времевият печат е броят на секундите от 1 януари 1970 г. (UTC)

Konvertirani datum i vrijeme

Unix Timestamp Converter

Uvod

Unix timestamp (poznat i kao POSIX vrijeme ili Epoch vrijeme) je sustav za opisivanje trenutka u vremenu. To je broj sekundi koji su prošli od 1. siječnja 1970. (ponoć UTC/GMT), ne računajući prijestupne sekunde. Unix timestampi se široko koriste u računalnim sustavima i programskim jezicima jer pružaju kompaktno, jezikom neovisno predstavljanje određenog trenutka u vremenu.

Ovaj konverter omogućuje vam pretvorbu Unix timestamp-a u ljudski čitljiv datum i vrijeme. Podržava i 12-satni (AM/PM) i 24-satni format vremena kako bi se zadovoljile različite regionalne i osobne preferencije.

Kako Unix Timestamps Funkcioniraju

Unix timestampi se računaju kao broj sekundi od Unix Epoch (1. siječnja 1970., 00:00:00 UTC). To ih čini posebno korisnima za izračunavanje vremenskih razlika i za pohranu datuma u kompaktom formatu.

Matematička konverzija iz Unix timestamp-a u kalendarski datum uključuje nekoliko koraka:

  1. Počnite s Unix Epoch (1. siječnja 1970., 00:00:00 UTC)
  2. Dodajte broj sekundi u timestamp-u
  3. Uzmite u obzir prijestupne godine, varijabilne duljine mjeseci i druge kalendarske složenosti
  4. Primijenite prilagodbe vremenskoj zoni ako je potrebno

Na primjer, Unix timestamp 1609459200 predstavlja petak, 1. siječnja 2021., 00:00:00 UTC.

Formula za konverziju može se izraziti kao:

Datum=Unix Epoch+Timestamp (u sekundama)\text{Datum} = \text{Unix Epoch} + \text{Timestamp (u sekundama)}

Većina programskih jezika i operativnih sustava pruža ugrađene funkcije za rukovanje ovom konverzijom, apstrahirajući složene kalendarske izračune.

Opcije Formata Vremena

Ovaj konverter nudi dvije opcije formata vremena:

  1. 24-satni format (ponekad nazvan "vojni čas"): Sati se kreću od 0 do 23, a nema AM/PM oznake. Na primjer, 15:00 se prikazuje kao 15:00.

  2. 12-satni format: Sati se kreću od 1 do 12, s AM (ante meridiem) za vrijeme od ponoći do podneva, i PM (post meridiem) za vrijeme od podneva do ponoći. Na primjer, 15:00 u 24-satnom formatu prikazuje se kao 3:00 PM.

Izbor između ovih formata uglavnom je pitanje regionalne konvencije i osobne preferencije:

  • 24-satni format se često koristi u većini Europe, Latinskoj Americi i Aziji, kao i u znanstvenim, vojnim i medicinskim kontekstima širom svijeta.
  • 12-satni format je prisutan u Sjedinjenim Američkim Državama, Kanadi, Australiji i nekim drugim engleskim govornim zemljama za svakodnevnu upotrebu.

Rubne Slučajeve i Ograničenja

Kada radite s Unix timestamp-ima, važno je biti svjestan nekoliko rubnih slučajeva i ograničenja:

  1. Negativni timestampi: Oni predstavljaju datume prije Unix Epoch (1. siječnja 1970.). Iako su matematički valjani, neki sustavi možda neće ispravno obraditi negativne timestamp-e.

  2. Problem godine 2038: Unix timestampi se često pohranjuju kao 32-bitni potpisani cijeli brojevi, koji će preopteretiti 19. siječnja 2038. Nakon ove točke, 32-bitni sustavi neće moći ispravno predstavljati vremena osim ako se ne promijene da koriste veći tip cijelog broja.

  3. Ekstremno veliki timestampi: Vrlo daleki budući datumi možda neće biti predstavljivi u nekim sustavima, ili će se možda obraditi nekonzistentno.

  4. Prijestupne sekunde: Unix vrijeme ne uzima u obzir prijestupne sekunde, koje se povremeno dodaju UTC-u kako bi se nadoknadila nepravilna rotacija Zemlje. To znači da Unix vrijeme nije precizno usklađeno s astronomskim vremenom.

  5. Razmatranja vremenskih zona: Unix timestampi predstavljaju trenutke u UTC-u. Pretvaranje u lokalno vrijeme zahtijeva dodatne informacije o vremenskoj zoni.

  6. Ljetno računanje vremena: Kada se timestampi pretvaraju u lokalno vrijeme, treba uzeti u obzir složenosti prijelaza na ljetno računanje vremena.

Upotrebe

Unix timestampi se koriste u brojnim aplikacijama širom računalstva i upravljanja podacima:

  1. Baze podataka: Timestampi se često koriste za bilježenje kada su unosi stvoreni ili izmijenjeni.

  2. Web razvoj: HTTP zaglavlja, kolačići i mehanizmi keširanja često koriste Unix timestamp-e.

  3. Zapisnici: Sustavni zapisi obično bilježe događaje s Unix timestamp-ima radi preciznog kronološkog redoslijeda.

  4. Sustavi za kontrolu verzija: Git i drugi VCS koriste timestamp-e za bilježenje kada su izvršene promjene.

  5. API odgovori: Mnogi web API-ji uključuju timestamp-e u svojim odgovorima kako bi naznačili kada su podaci generirani ili kada su resursi posljednji put izmijenjeni.

  6. Datotečni sustavi: Vrijeme stvaranja i izmjene datoteka često se pohranjuje kao Unix timestamp.

  7. Upravljanje sesijama: Web aplikacije koriste timestamp-e kako bi odredile kada bi korisničke sesije trebale isteći.

  8. Analiza podataka: Timestampi pružaju standardizirani način za rad s vremenskim podacima u analitičkim aplikacijama.

Alternative

Iako su Unix timestampi široko korišteni, postoje alternativni formati vremena koji mogu biti prikladniji u određenim kontekstima:

  1. ISO 8601: Standardizirani string format (npr. "2021-01-01T00:00:00Z") koji je ljudski čitljiv, a istovremeno održava sortabilnost. Često se preferira za razmjenu podataka i korisničke aplikacije.

  2. RFC 3339: Profil ISO 8601 korišten u internet protokolima, s strožim zahtjevima za formatiranje.

  3. Ljudski čitljivi formati: Lokalizirani datumski stringovi (npr. "1. siječnja 2021.") prikladniji su za izravnu interakciju s korisnicima, ali su manje pogodni za izračun.

  4. Microsoft FILETIME: 64-bitna vrijednost koja predstavlja broj intervala od 100 nanosekundi od 1. siječnja 1601., korištena u Windows sustavima.

  5. Julijanski dan: Koristi se u astronomiji i nekim znanstvenim aplikacijama, brojeći dane od 1. siječnja 4713. pr. Kr.

Izbor formata vremena ovisi o faktorima kao što su:

  • Potrebna preciznost
  • Potrebe za ljudskom čitljivošću
  • Ograničenja pohrane
  • Kompatibilnost s postojećim sustavima
  • Raspon datuma koji treba biti predstavljen

Povijest

Koncept Unix vremena nastao je razvojem Unix operativnog sustava u Bell Labs-u krajem 1960-ih i početkom 1970-ih. Odluka da se 1. siječnja 1970. uzme kao epoch bila je donekle proizvoljna, ali praktična za to vrijeme - bila je dovoljno blizu da minimizira zahtjeve za pohranom za datume od interesa, ali dovoljno daleko u prošlosti da bude korisna za povijesne podatke.

Izvorna implementacija koristila je 32-bitni potpisani cijeli broj za pohranu broja sekundi, što je bilo adekvatno za očekivani životni vijek Unix sustava u to vrijeme. Međutim, ova odluka dovela je do Problema godine 2038 (ponekad nazvanog "Y2K38" ili "Unix Millennium Bug"), jer 32-bitni potpisani cijeli brojevi mogu predstavljati datume samo do 19. siječnja 2038. (03:14:07 UTC).

Kako su Unix i Unix-slični operativni sustavi stekli popularnost, Unix timestamp postao je de facto standard za predstavljanje vremena u računalstvu. Usvojili su ga brojni programski jezici, baze podataka i aplikacije, proširujući se daleko izvan svog izvorno Unix okruženja.

Moderni sustavi sve više koriste 64-bitne cijele brojeve za timestamp-e, što proširuje predstavljivi raspon na približno 292 milijarde godina u oba smjera od epohe, učinkovito rješavajući Problem godine 2038. Međutim, naslijeđeni sustavi i aplikacije još uvijek mogu biti ranjivi.

Jednostavnost i korisnost Unix timestamp-a osigurali su njegovu kontinuiranu relevantnost unatoč razvoju sofisticiranijih formata predstavljanja vremena. Ostaje temeljni koncept u računalstvu, koji podupire većinu naše digitalne infrastrukture.

Primjeri Koda

Evo primjera kako pretvoriti Unix timestamp u ljudski čitljive datume u raznim programskim jezicima:

// JavaScript konverzija timestamp-a
function convertUnixTimestamp(timestamp, use12Hour = false) {
  // Kreirajte novi Date objekt (JavaScript koristi milisekunde)
  const date = new Date(timestamp * 1000);
  
  // Opcije formatiranja
  const options = {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
    weekday: 'long',
    hour: use12Hour ? 'numeric' : '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: use12Hour
  };
  
  // Pretvorite u string koristeći lokalno formatiranje
  return date.toLocaleString(undefined, options);
}

// Primjer korištenja
const timestamp = 1609459200; // 1. siječnja 2021. 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // 24-satni format
console.log(convertUnixTimestamp(timestamp, true));  // 12-satni format
# Python konverzija timestamp-a
import datetime

def convert_unix_timestamp(timestamp, use_12hour=False):
    # Pretvorite Unix timestamp u datetime objekt
    date = datetime.datetime.fromtimestamp(timestamp)
    
    # Formatirajte string datuma
    if use_12hour:
        format_string = "%A, %B %d, %Y %I:%M:%S %p"  # 12-satni format s AM/PM
    else:
        format_string = "%A, %B %d, %Y %H:%M:%S"     # 24-satni format
    
    return date.strftime(format_string)

# Primjer korištenja
timestamp = 1609459200  # 1. siječnja 2021. 00:00:00 UTC
print(convert_unix_timestamp(timestamp, False))  # 24-satni format
print(convert_unix_timestamp(timestamp, True))   # 12-satni format
<?php
// PHP konverzija timestamp-a
function convertUnixTimestamp($timestamp, $use12Hour = false) {
    // Format string
    $formatString = $use12Hour 
        ? 'l, F j, Y g:i:s A'  // 12-satni format s AM/PM
        : 'l, F j, Y H:i:s';   // 24-satni format
    
    // Pretvorite i formatirajte datum
    return date($formatString, $timestamp);
}

// Primjer korištenja
$timestamp = 1609459200; // 1. siječnja 2021. 00:00:00 UTC
echo convertUnixTimestamp($timestamp, false) . "\n"; // 24-satni format
echo convertUnixTimestamp($timestamp, true) . "\n";  // 12-satni format
?>
// Java konverzija timestamp-a
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) {
        // Pretvorite Unix timestamp u Instant, zatim u LocalDateTime
        Instant instant = Instant.ofEpochSecond(timestamp);
        LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        
        // Kreirajte format prema željenom formatu
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
        );
        
        // Formatirajte datum
        return dateTime.format(formatter);
    }
    
    public static void main(String[] args) {
        long timestamp = 1609459200; // 1. siječnja 2021. 00:00:00 UTC
        System.out.println(convertUnixTimestamp(timestamp, false)); // 24-satni format
        System.out.println(convertUnixTimestamp(timestamp, true));  // 12-satni format
    }
}
// C# konverzija timestamp-a
using System;

class UnixTimestampConverter
{
    public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
    {
        // Pretvorite Unix timestamp u DateTime
        // Unix timestamp je sekunde od 1970-01-01
        DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
        
        // Format string na temelju 12-satnog ili 24-satnog preferencija
        string formatString = use12Hour 
            ? "dddd, MMMM d, yyyy h:mm:ss tt"  // 12-satni format s AM/PM
            : "dddd, MMMM d, yyyy HH:mm:ss";   // 24-satni format
        
        // Vratite formatirani string
        return dateTime.ToString(formatString);
    }
    
    static void Main()
    {
        long timestamp = 1609459200; // 1. siječnja 2021. 00:00:00 UTC
        Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // 24-satni format
        Console.WriteLine(ConvertUnixTimestamp(timestamp, true));  // 12-satni format
    }
}
# Ruby konverzija timestamp-a
require 'time'

def convert_unix_timestamp(timestamp, use_12hour = false)
  # Pretvorite Unix timestamp u Time objekt
  time = Time.at(timestamp)
  
  # Format na temelju 12-satnog ili 24-satnog preferencija
  if use_12hour
    time.strftime("%A, %B %d, %Y %I:%M:%S %p")  # 12-satni format s AM/PM
  else
    time.strftime("%A, %B %d, %Y %H:%M:%S")     # 24-satni format
  end
end

# Primjer korištenja
timestamp = 1609459200  # 1. siječnja 2021. 00:00:00 UTC
puts convert_unix_timestamp(timestamp, false)  # 24-satni format
puts convert_unix_timestamp(timestamp, true)   # 12-satni format
// Go konverzija timestamp-a
package main

import (
    "fmt"
    "time"
)

func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
    // Pretvorite Unix timestamp u Time
    t := time.Unix(timestamp, 0)
    
    // Format string na temelju 12-satnog ili 24-satnog preferencija
    formatString := "Monday, January 2, 2006 "
    if use12Hour {
        formatString += "3:04:05 PM"  // 12-satni format s AM/PM
    } else {
        formatString += "15:04:05"    // 24-satni format
    }
    
    // Vratite formatirano vrijeme
    return t.Format(formatString)
}

func main() {
    timestamp := int64(1609459200) // 1. siječnja 2021. 00:00:00 UTC
    fmt.Println(convertUnixTimestamp(timestamp, false)) // 24-satni format
    fmt.Println(convertUnixTimestamp(timestamp, true))  // 12-satni format
}
// Swift konverzija timestamp-a
import Foundation

func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
    // Kreirajte Date iz Unix timestamp-a
    let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
    
    // Kreirajte DateFormatter
    let formatter = DateFormatter()
    formatter.dateStyle = .full
    
    // Postavite stil vremena na temelju 12-satnog ili 24-satnog preferencija
    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")
    }
    
    // Vratite formatirani datum
    return formatter.string(from: date)
}

// Primjer korištenja
let timestamp = 1609459200 // 1. siječnja 2021. 00:00:00 UTC
print(convertUnixTimestamp(timestamp, use12Hour: false)) // 24-satni format
print(convertUnixTimestamp(timestamp, use12Hour: true))  // 12-satni format
# R konverzija timestamp-a
convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
  # Pretvorite Unix timestamp u POSIXct datetime
  date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
  
  # Format na temelju 12-satnog ili 24-satnog preferencija
  if (use_12hour) {
    format_string <- "%A, %B %d, %Y %I:%M:%S %p"  # 12-satni format s AM/PM
  } else {
    format_string <- "%A, %B %d, %Y %H:%M:%S"     # 24-satni format
  }
  
  # Vratite formatirani string datuma
  format(date_time, format_string)
}

# Primjer korištenja
timestamp <- 1609459200  # 1. siječnja 2021. 00:00:00 UTC
cat(convert_unix_timestamp(timestamp, FALSE), "\n")  # 24-satni format
cat(convert_unix_timestamp(timestamp, TRUE), "\n")   # 12-satni format
% MATLAB konverzija timestamp-a
function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
    % Pretvorite Unix timestamp u MATLAB datetime
    % MATLAB datumi su dani od 1900-01-01, s 1 = 1900-01-01
    % Unix timestampi su sekunde od 1970-01-01
    
    % Prvo pretvorite u Excel format datuma
    % 25569 je broj dana između 1900-01-01 i 1970-01-01
    excelDate = (timestamp / 86400) + 25569;
    
    % Formatirati na temelju 12-satnog ili 24-satnog preferencija
    if use12Hour
        formattedDate = datestr(excelDate, 'dddd, mmmm dd, yyyy h:mm:ss AM/PM');
    else
        formattedDate = datestr(excelDate, 'dddd, mmmm dd, yyyy hh:mm:ss');
    end
end

% Primjer korištenja
timestamp = 1609459200;  % 1. siječnja 2021. 00:00:00 UTC
disp(convertUnixTimestamp(timestamp, false))  % 24-satni format
disp(convertUnixTimestamp(timestamp, true))   % 12-satni format
' Excel VBA konverzija timestamp-a
Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
    ' Pretvorite Unix timestamp u Excel datum/vrijeme
    ' Excel datumi su dani od 1900-01-01, s 1 = 1900-01-01
    ' Unix timestampi su sekunde od 1970-01-01
    
    ' Prvo pretvorite u Excel format datuma
    ' 25569 je broj dana između 1900-01-01 i 1970-01-01
    Dim excelDate As Double
    excelDate = (timestamp / 86400) + 25569
    
    ' Formatirati datum na temelju 12-satnog ili 24-satnog preferencija
    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

' Korištenje u radnom listu:
' =ConvertUnixTimestamp(1609459200, TRUE)  ' 12-satni format
' =ConvertUnixTimestamp(1609459200, FALSE) ' 24-satni format

Rukovanje Rubnim Slučajevima

Kada radite s Unix timestamp-ima, važno je ispravno obraditi rubne slučajeve. Evo primjera rukovanja nekim uobičajenim rubnim slučajevima:

// JavaScript rukovanje rubnim slučajevima
function safeConvertTimestamp(timestamp, use12Hour = false) {
  // Provjerite je li timestamp valjan
  if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
    return "Nevaljan timestamp";
  }
  
  // Provjerite negativne timestamp-e (datumi prije 1970.)
  if (timestamp < 0) {
    // Neki preglednici možda neće ispravno obraditi negativne timestamp-e
    // Koristite robusniji pristup za datume prije 1970.
    const date = new Date(timestamp * 1000);
    if (isNaN(date.getTime())) {
      return "Nevaljan datum (prije 1970.)";
    }
  }
  
  // Provjerite Y2K38 problem (za 32-bitne sustave)
  const maxInt32 = 2147483647; // Maksimalna vrijednost za 32-bitni potpisani cijeli broj
  if (timestamp > maxInt32) {
    // Razmotrite korištenje BigInt za vrlo velike timestamp-e u modernom JavaScript-u
    console.warn("Timestamp premašuje granicu 32-bitnog cijelog broja (Y2K38 problem)");
  }
  
  // Nastavite s normalnom konverzijom
  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 "Greška prilikom konverzije timestamp-a: " + error.message;
  }
}

Reference

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

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

  3. Olson, Arthur David. "Složenosti kalendarskog vremena." 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: Datum i vrijeme na internetu: Timestamps." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339

  6. Kernighan, Brian W., i Dennis M. Ritchie. "C Programski Jezik." Prentice Hall, 1988.

Feedback