Konverter Unix vremenskog oznaka u datum: Podrška za 12/24 satni format
Konvertujte Unix vremenske oznake u ljudski čitljive datume i vremena. Izaberite između 12-satnog i 24-satnog formata vremena uz ovaj jednostavan, korisnički prijateljski alat za konverziju.
Unix vremenski pečat
Pretvoreni datum i vreme
Dokumentacija
Konverter Unix vremenskih oznaka
Uvod
Unix vremenska oznaka (poznata i kao POSIX vreme ili Epoch vreme) je sistem za opisivanje tačke u vremenu. To je broj sekundi koje su prošle od 1. januara 1970. (ponoć UTC/GMT), ne računajući prestupne sekunde. Unix vremenske oznake se široko koriste u računarstvu i programskim jezicima jer pružaju kompaktan, jezikom nezavistan prikaz određenog trenutka u vremenu.
Ovaj konverter vam omogućava da transformišete Unix vremensku oznaku u ljudski čitljiv format datuma i vremena. Podržava kako 12-časovni (AM/PM) tako i 24-časovni format vremena kako bi se prilagodili različitim regionalnim i ličnim preferencama.
Kako funkcionišu Unix vremenske oznake
Unix vremenske oznake se računaju kao broj sekundi od Unix epohe (1. januar 1970, 00:00:00 UTC). Ovo ih čini posebno korisnim za izračunavanje vremenskih razlika i za skladištenje datuma u kompaktom formatu.
Matematička konverzija iz Unix vremenske oznake u kalendarski datum uključuje nekoliko koraka:
- Počnite sa Unix epohom (1. januar 1970, 00:00:00 UTC)
- Dodajte broj sekundi u vremenskoj oznaci
- Uzmite u obzir prestupne godine, varijabilne dužine meseci i druge kalendarske složenosti
- Primijenite prilagođavanja vremenskoj zoni ako je potrebno
Na primer, Unix vremenska oznaka 1609459200
predstavlja petak, 1. januar 2021, 00:00:00 UTC.
Formula za konverziju može se izraziti kao:
Većina programskih jezika i operativnih sistema pruža ugrađene funkcije za rukovanje ovom konverzijom, apstrahujući složene kalendarske proračune.
Opcije formata vremena
Ovaj konverter nudi dve opcije formata vremena:
-
24-časovni format (ponekad nazvan "vojni vreme"): Sati se kreću od 0 do 23, i nema AM/PM oznake. Na primer, 3:00 PM se prikazuje kao 15:00.
-
12-časovni format: Sati se kreću od 1 do 12, sa AM (ante meridiem) za vreme od ponoći do podneva, i PM (post meridiem) za vreme od podneva do ponoći. Na primer, 15:00 u 24-časovnom formatu se prikazuje kao 3:00 PM.
Izbor između ovih formata je uglavnom pitanje regionalne konvencije i ličnih preferencija:
- 24-časovni format se obično koristi u većini Evrope, Latinske Amerike i Azije, kao i u naučnim, vojnim i medicinskim kontekstima širom sveta.
- 12-časovni format je prisutan u Sjedinjenim Američkim Državama, Kanadi, Australiji i nekim drugim englesko govornim zemljama za svakodnevnu upotrebu.
Izdvojeni slučajevi i ograničenja
Kada radite sa Unix vremenskim oznakama, važno je biti svestan nekoliko izdvojenih slučajeva i ograničenja:
-
Negativne vremenske oznake: Ove predstavljaju datume pre Unix epohe (1. januar 1970). Iako su matematički validne, neki sistemi možda neće pravilno obraditi negativne vremenske oznake.
-
Problem godine 2038: Unix vremenske oznake se često čuvaju kao 32-bitni potpisani celobrojni tipovi, koji će preplaviti 19. januara 2038. Nakon ovog datuma, 32-bitni sistemi neće moći pravilno predstavljati vremena osim ako se ne modifikuju da koriste veći celobrojni tip.
-
Ekstremno velike vremenske oznake: Veoma daleki budući datumi možda neće biti reprezentabilni u nekim sistemima, ili će se možda obraditi nekonzistentno.
-
Prestupne sekunde: Unix vreme ne uzima u obzir prestupne sekunde, koje se povremeno dodaju UTC-u da bi se nadoknadila nepravilna rotacija Zemlje. To znači da Unix vreme nije precizno usklađeno sa astronomskim vremenom.
-
Razmatranja vremenskih zona: Unix vremenske oznake predstavljaju trenutke u UTC-u. Konvertovanje u lokalno vreme zahteva dodatne informacije o vremenskoj zoni.
-
Letnje računanje vremena: Kada se vremenske oznake konvertuju u lokalno vreme, moraju se uzeti u obzir složenosti prelaza na letnje računanje vremena.
Upotrebe
Unix vremenske oznake se koriste u brojnim aplikacijama širom računarstva i upravljanja podacima:
-
Baze podataka: Vremenske oznake se obično koriste za beleženje kada su unosi kreirani ili izmenjeni.
-
Web razvoj: HTTP zaglavlja, kolačići i mehanizmi keširanja često koriste Unix vremenske oznake.
-
Log datoteke: Sistemski logovi obično beleže događaje sa Unix vremenskim oznakama radi preciznog hronološkog redosleda.
-
Sistemi za kontrolu verzija: Git i drugi VCS koriste vremenske oznake za beleženje kada su izvršene promene.
-
API odgovori: Mnogi web API-ji uključuju vremenske oznake u svojim odgovorima kako bi naznačili kada su podaci generisani ili kada su resursi poslednji put izmenjeni.
-
Datotečni sistemi: Vremena kreiranja i izmene datoteka se često čuvaju kao Unix vremenske oznake.
-
Upravljanje sesijama: Web aplikacije koriste vremenske oznake da odrede kada bi korisničke sesije trebalo da isteknu.
-
Analiza podataka: Vremenske oznake pružaju standardizovani način za rad sa vremenskim podacima u analitičkim aplikacijama.
Alternativne opcije
Iako su Unix vremenske oznake široko korišćene, postoje alternativni formati vremenskog predstavljanja koji mogu biti prikladniji u određenim kontekstima:
-
ISO 8601: Standardizovani string format (npr., "2021-01-01T00:00:00Z") koji je ljudski čitljiv dok zadržava mogućnost sortiranja. Često se preferira za razmenu podataka i aplikacije usmerene na korisnike.
-
RFC 3339: Profil ISO 8601 koji se koristi u internet protokolima, sa strožim zahtevima za formatiranje.
-
Ljudski čitljivi formati: Lokalizovani datumski stringovi (npr., "1. januar 2021") su prikladniji za direktnu interakciju sa korisnicima, ali su manje pogodni za računanje.
-
Microsoft FILETIME: 64-bitna vrednost koja predstavlja broj intervala od 100 nanosekundi od 1. januara 1601, koja se koristi u Windows sistemima.
-
Julijanski dan: Koristi se u astronomiji i nekim naučnim aplikacijama, brojeći dane od 1. januara 4713. pre nove ere.
Izbor formata vremena zavisi od faktora kao što su:
- Potrebna preciznost
- Potrebe za ljudskom čitljivošću
- Ograničenja skladištenja
- Kompatibilnost sa postojećim sistemima
- Opseg datuma koji treba da bude predstavljen
Istorija
Koncept Unix vremena potiče od razvoja Unix operativnog sistema u Bell Labs-u krajem 1960-ih i početkom 1970-ih. Odluka da se 1. januar 1970. uzme kao epoha bila je donekle arbitrarna, ali praktična za to vreme—bila je dovoljno blizu da minimizira zahteve za skladištenjem datuma od interesa, ali dovoljno daleko u prošlosti da bude korisna za istorijske podatke.
Originalna implementacija koristila je 32-bitni potpisani celobrojni tip za skladištenje broja sekundi, što je bilo adekvatno za očekivani vek Unix sistema u to vreme. Međutim, ova odluka dovela je do problema godine 2038 (ponekad nazvanog "Y2K38" ili "Unix Millennium Bug"), jer 32-bitni potpisani celobrojni tipovi mogu predstavljati datume samo do 19. januara 2038. (03:14:07 UTC).
Kako su Unix i Unix-slični operativni sistemi stekli popularnost, Unix vremenska oznaka postala je de facto standard za predstavljanje vremena u računarstvu. Usvojili su je brojni programski jezici, baze podataka i aplikacije, proširujući se daleko izvan svog originalnog Unix okruženja.
Moderni sistemi sve više koriste 64-bitne celobrojne tipove za vremenske oznake, što produžava reprezentativni opseg na približno 292 milijarde godina u obe strane od epohe, efikasno rešavajući problem godine 2038. Međutim, nasleđeni sistemi i aplikacije mogu biti ranjivi.
Jednostavnost i korisnost Unix vremenske oznake osigurale su njenu kontinuiranu relevantnost uprkos razvoju sofisticiranijih formata vremenskog predstavljanja. Ona ostaje fundamentalni koncept u računarstvu, koji je osnova naše digitalne infrastrukture.
Primeri koda
Evo primera kako konvertovati Unix vremenske oznake u ljudski čitljive datume u različitim programskim jezicima:
1// JavaScript konverzija vremenskih oznaka
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3 // Kreirajte novi Date objekat (JavaScript koristi milisekunde)
4 const date = new Date(timestamp * 1000);
5
6 // Opcije formatiranja
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 // Konvertujte u string koristeći lokalno formatiranje
19 return date.toLocaleString(undefined, options);
20}
21
22// Primer korišćenja
23const timestamp = 1609459200; // 1. januar 2021 00:00:00 UTC
24console.log(convertUnixTimestamp(timestamp, false)); // 24-časovni format
25console.log(convertUnixTimestamp(timestamp, true)); // 12-časovni format
26
1# Python konverzija vremenskih oznaka
2import datetime
3
4def convert_unix_timestamp(timestamp, use_12hour=False):
5 # Konvertujte Unix vremensku oznaku u datetime objekat
6 date = datetime.datetime.fromtimestamp(timestamp)
7
8 # Formatirajte string datuma
9 if use_12hour:
10 format_string = "%A, %B %d, %Y %I:%M:%S %p" # 12-časovni format sa AM/PM
11 else:
12 format_string = "%A, %B %d, %Y %H:%M:%S" # 24-časovni format
13
14 return date.strftime(format_string)
15
16# Primer korišćenja
17timestamp = 1609459200 # 1. januar 2021 00:00:00 UTC
18print(convert_unix_timestamp(timestamp, False)) # 24-časovni format
19print(convert_unix_timestamp(timestamp, True)) # 12-časovni format
20
1<?php
2// PHP konverzija vremenskih oznaka
3function convertUnixTimestamp($timestamp, $use12Hour = false) {
4 // Format string
5 $formatString = $use12Hour
6 ? 'l, F j, Y g:i:s A' // 12-časovni format sa AM/PM
7 : 'l, F j, Y H:i:s'; // 24-časovni format
8
9 // Konvertujte i formatirajte datum
10 return date($formatString, $timestamp);
11}
12
13// Primer korišćenja
14$timestamp = 1609459200; // 1. januar 2021 00:00:00 UTC
15echo convertUnixTimestamp($timestamp, false) . "\n"; // 24-časovni format
16echo convertUnixTimestamp($timestamp, true) . "\n"; // 12-časovni format
17?>
18
1// Java konverzija vremenskih oznaka
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 // Konvertujte Unix vremensku oznaku u Instant, zatim u LocalDateTime
10 Instant instant = Instant.ofEpochSecond(timestamp);
11 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
12
13 // Kreirajte formatirac na osnovu željenog formata
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 // Formatirajte datum
19 return dateTime.format(formatter);
20 }
21
22 public static void main(String[] args) {
23 long timestamp = 1609459200; // 1. januar 2021 00:00:00 UTC
24 System.out.println(convertUnixTimestamp(timestamp, false)); // 24-časovni format
25 System.out.println(convertUnixTimestamp(timestamp, true)); // 12-časovni format
26 }
27}
28
1// C# konverzija vremenskih oznaka
2using System;
3
4class UnixTimestampConverter
5{
6 public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
7 {
8 // Konvertujte Unix vremensku oznaku u DateTime
9 // Unix vremenska oznaka je sekunde od 1970-01-01
10 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
11
12 // Format string na osnovu 12-časovnog ili 24-časovnog izbora
13 string formatString = use12Hour
14 ? "dddd, MMMM d, yyyy h:mm:ss tt" // 12-časovni format sa AM/PM
15 : "dddd, MMMM d, yyyy HH:mm:ss"; // 24-časovni format
16
17 // Vratite formatirani string datuma
18 return dateTime.ToString(formatString);
19 }
20
21 static void Main()
22 {
23 long timestamp = 1609459200; // 1. januar 2021 00:00:00 UTC
24 Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // 24-časovni format
25 Console.WriteLine(ConvertUnixTimestamp(timestamp, true)); // 12-časovni format
26 }
27}
28
1# Ruby konverzija vremenskih oznaka
2require 'time'
3
4def convert_unix_timestamp(timestamp, use_12hour = false)
5 # Konvertujte Unix vremensku oznaku u Time objekat
6 time = Time.at(timestamp)
7
8 # Formatirajte na osnovu 12-časovnog ili 24-časovnog izbora
9 if use_12hour
10 time.strftime("%A, %B %d, %Y %I:%M:%S %p") # 12-časovni format sa AM/PM
11 else
12 time.strftime("%A, %B %d, %Y %H:%M:%S") # 24-časovni format
13 end
14end
15
16# Primer korišćenja
17timestamp = 1609459200 # 1. januar 2021 00:00:00 UTC
18puts convert_unix_timestamp(timestamp, false) # 24-časovni format
19puts convert_unix_timestamp(timestamp, true) # 12-časovni format
20
1// Go konverzija vremenskih oznaka
2package main
3
4import (
5 "fmt"
6 "time"
7)
8
9func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
10 // Konvertujte Unix vremensku oznaku u vreme
11 t := time.Unix(timestamp, 0)
12
13 // Format string na osnovu 12-časovnog ili 24-časovnog izbora
14 formatString := "Monday, January 2, 2006 "
15 if use12Hour {
16 formatString += "3:04:05 PM" // 12-časovni format sa AM/PM
17 } else {
18 formatString += "15:04:05" // 24-časovni format
19 }
20
21 // Vratite formatirano vreme
22 return t.Format(formatString)
23}
24
25func main() {
26 timestamp := int64(1609459200) // 1. januar 2021 00:00:00 UTC
27 fmt.Println(convertUnixTimestamp(timestamp, false)) // 24-časovni format
28 fmt.Println(convertUnixTimestamp(timestamp, true)) // 12-časovni format
29}
30
1// Swift konverzija vremenskih oznaka
2import Foundation
3
4func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
5 // Kreirajte Date iz Unix vremenske oznake
6 let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
7
8 // Kreirajte DateFormatter
9 let formatter = DateFormatter()
10 formatter.dateStyle = .full
11
12 // Postavite stil vremena na osnovu 12-časovnog ili 24-časovnog izbora
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 // Vratite formatirani datum
23 return formatter.string(from: date)
24}
25
26// Primer korišćenja
27let timestamp = 1609459200 // 1. januar 2021 00:00:00 UTC
28print(convertUnixTimestamp(timestamp, use12Hour: false)) // 24-časovni format
29print(convertUnixTimestamp(timestamp, use12Hour: true)) // 12-časovni format
30
1# R konverzija vremenskih oznaka
2convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
3 # Konvertujte Unix vremensku oznaku u POSIXct datetime
4 date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
5
6 # Formatirajte na osnovu 12-časovnog ili 24-časovnog izbora
7 if (use_12hour) {
8 format_string <- "%A, %B %d, %Y %I:%M:%S %p" # 12-časovni format sa AM/PM
9 } else {
10 format_string <- "%A, %B %d, %Y %H:%M:%S" # 24-časovni format
11 }
12
13 # Vratite formatirani string datuma
14 format(date_time, format_string)
15}
16
17# Primer korišćenja
18timestamp <- 1609459200 # 1. januar 2021 00:00:00 UTC
19cat(convert_unix_timestamp(timestamp, FALSE), "\n") # 24-časovni format
20cat(convert_unix_timestamp(timestamp, TRUE), "\n") # 12-časovni format
21
1% MATLAB konverzija vremenskih oznaka
2function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
3 % Konvertujte Unix vremensku oznaku u MATLAB datetime
4 % MATLAB datumi su dani od 1900-01-01, gde je 1 = 1900-01-01
5 % Unix vremenske oznake su sekunde od 1970-01-01
6
7 % Prvo konvertujte u Excel format datuma
8 % 25569 je broj dana između 1900-01-01 i 1970-01-01
9 excelDate = (timestamp / 86400) + 25569;
10
11 % Formatirajte datum na osnovu 12-časovnog ili 24-časovnog izbora
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% Primer korišćenja
20timestamp = 1609459200; % 1. januar 2021 00:00:00 UTC
21disp(convertUnixTimestamp(timestamp, false)) % 24-časovni format
22disp(convertUnixTimestamp(timestamp, true)) % 12-časovni format
23
1' Excel VBA konverzija vremenskih oznaka
2Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
3 ' Konvertujte Unix vremensku oznaku u Excel datum/vreme
4 ' Excel datumi su dani od 1900-01-01, gde je 1 = 1900-01-01
5 ' Unix vremenske oznake su sekunde od 1970-01-01
6
7 ' Prvo konvertujte u Excel format datuma
8 ' 25569 je broj dana između 1900-01-01 i 1970-01-01
9 Dim excelDate As Double
10 excelDate = (timestamp / 86400) + 25569
11
12 ' Formatirajte datum na osnovu 12-časovnog ili 24-časovnog izbora
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' Korišćenje u radnom listu:
21' =ConvertUnixTimestamp(1609459200, TRUE) ' 12-časovni format
22' =ConvertUnixTimestamp(1609459200, FALSE) ' 24-časovni format
23
Rukovanje izdvojenim slučajevima
Kada radite sa Unix vremenskim oznakama, važno je pravilno obraditi izdvojene slučajeve. Evo primera kako obraditi neke uobičajene izdvojene slučajeve:
1// JavaScript rukovanje izdvojenim slučajevima
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Proverite da li je vremenska oznaka validna
4 if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5 return "Nevalidna vremenska oznaka";
6 }
7
8 // Proverite negativne vremenske oznake (datumi pre 1970)
9 if (timestamp < 0) {
10 // Neki pregledači možda neće pravilno obraditi negativne vremenske oznake
11 // Koristite robusniji pristup za datume pre 1970
12 const date = new Date(timestamp * 1000);
13 if (isNaN(date.getTime())) {
14 return "Nevalidan datum (pre 1970)";
15 }
16 }
17
18 // Proverite problem Y2K38 (za 32-bitne sisteme)
19 const maxInt32 = 2147483647; // Maksimalna vrednost za 32-bitni potpisani celobrojni tip
20 if (timestamp > maxInt32) {
21 // Razmotrite korišćenje BigInt za veoma velike vremenske oznake u modernom JavaScript-u
22 console.warn("Vremenska oznaka premašuje limit 32-bitnog celobroja (Y2K38 problem)");
23 }
24
25 // Nastavite sa normalnom konverzijom
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 "Greška prilikom konvertovanja vremenske oznake: " + error.message;
41 }
42}
43
Reference
-
"Unix vreme." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time
-
"Problem godine 2038." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "Složenosti kalendarskog vremena." 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: Datum i vreme na internetu: Vremenske oznake." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., i Dennis M. Ritchie. "C programski jezik." Prentice Hall, 1988.
Povratne informacije
Kliknite na povratnu informaciju tosta da biste počeli davati povratne informacije o ovom alatu
Povezani alati
Otkrijte više alata koji mogu biti korisni za vaš radni proces