Prevádzač Unix časových pečiatok na dátum: Podpora 12/24 hodinového formátu
Preveďte unixové časové pečiatky na ľahko čitateľné dátumy a časy. Vyberte si medzi 12-hodinovým a 24-hodinovým formátom pomocou tohto jednoduchého, používateľsky prívetivého prevádzača.
Prevádzač Unixového časového razítka
Prevedený dátum a čas
Dokumentácia
Prevodník Unixových Časových Pečiatok
Úvod
Unixová časová pečiatka (známa aj ako POSIX čas alebo Epoch čas) je systém na opis bodu v čase. Je to počet sekúnd, ktoré uplynuli od 1. januára 1970 (polnoc UTC/GMT), bez započítania prestupných sekúnd. Unixové časové pečiatky sú široko používané v počítačových systémoch a programovacích jazykoch, pretože poskytujú kompaktné, jazykovo nezávislé zobrazenie konkrétneho okamihu v čase.
Tento prevodník časových pečiatok na dátum automaticky detekuje a spracováva časové pečiatky rôznych dĺžok, vrátane mikrosekundovej presnosti (16 číslic), milisekundovej presnosti (13 číslic) a štandardných unixových časových pečiatok (10 číslic). Nástroj identifikuje formát časovej pečiatky na základe dĺžky vstupu, konvertuje ho na ľahko čitateľný dátum a čas a zobrazuje výsledok bez toho, aby používatelia museli špecifikovať typ časovej pečiatky. Podporuje formáty času 12-hodinový (AM/PM) a 24-hodinový, aby vyhovoval rôznym regionálnym a osobným preferenciám.
Ako fungujú unixové časové pečiatky
Unixové časové pečiatky sa počítajú ako počet sekúnd od Unixovej epochy (1. január 1970, 00:00:00 UTC). To ich robí obzvlášť užitočnými pri výpočtoch časových rozdielov a pri uložení dátumov v kompaktnom formáte.
Matematická konverzia z unixovej časovej pečiatky na kalendárny dátum zahŕňa niekoľko krokov:
- Začnite s Unixovou epochou (1. január 1970, 00:00:00 UTC)
- Pridajte počet sekúnd v časovej pečiatke
- Zohľadnite prestupné roky, rôznu dĺžku mesiacov a ďalšie zložitosti kalendára
- Ak je to potrebné, aplikujte úpravy časového pásma
Napríklad, unixová časová pečiatka 1609459200
predstavuje piatok, 1. január 2021, 00:00:00 UTC.
Konverzný vzorec môže byť vyjadrený ako:
Väčšina programovacích jazykov a operačných systémov poskytuje vstavané funkcie na spracovanie tejto konverzie, čím abstrahuje zložitosti kalendára.
Formáty časových pečiatok a automatická detekcia
Náš prevodník podporuje tri bežné formáty časových pečiatok, ktoré sú automaticky detekované na základe počtu číslic:
-
Štandardná unixová časová pečiatka (10 číslic): Predstavuje sekundy od Unixovej epochy. Príklad:
1609459200
(1. január 2021, 00:00:00 UTC) -
Mikroskondová presnosť (13 číslic): Predstavuje milisekundy od Unixovej epochy. Príklad:
1609459200000
(1. január 2021, 00:00:00 UTC) -
Mikroskondová presnosť (16 číslic): Predstavuje mikrosekundy od Unixovej epochy. Príklad:
1609459200000000
(1. január 2021, 00:00:00 UTC)
Automatická detekcia funguje analýzou dĺžky vstupu:
- Ak vstup obsahuje 10 číslic, považuje sa za štandardnú unixovú časovú pečiatku (sekundy)
- Ak vstup obsahuje 13 číslic, považuje sa za milisekundovú časovú pečiatku
- Ak vstup obsahuje 16 číslic, považuje sa za mikrosekundovú časovú pečiatku
Táto automatická detekcia eliminuje potrebu, aby používatelia špecifikovali typ časovej pečiatky, čím je nástroj užívateľsky prívetivejší a efektívnejší.
Možnosti formátu času
Tento prevodník ponúka dve možnosti formátu času:
-
24-hodinový formát (niekedy nazývaný "vojenský čas"): Hodiny sa pohybujú od 0 do 23 a neexistuje označenie AM/PM. Napríklad, 15:00 je reprezentované ako 15:00.
-
12-hodinový formát: Hodiny sa pohybujú od 1 do 12, s AM (ante meridiem) pre časy od polnoci do obeda a PM (post meridiem) pre časy od obeda do polnoci. Napríklad, 15:00 v 24-hodinovom formáte je reprezentované ako 3:00 PM.
Voľba medzi týmito formátmi je do značnej miery otázkou regionálnej konvencie a osobných preferencií:
- 24-hodinový formát sa bežne používa vo väčšine Európy, Latinskej Ameriky a Ázie, ako aj v vedeckých, vojenských a zdravotníckych kontextoch po celom svete.
- 12-hodinový formát je rozšírený v Spojených štátoch, Kanade, Austrálii a niektorých ďalších anglicky hovoriacich krajinách pre každodenné použitie.
Okrajové prípady a obmedzenia
Pri práci s unixovými časovými pečiatkami rôznych presností je dôležité byť si vedomý niekoľkých okrajových prípadov a obmedzení:
-
Negatívne časové pečiatky: Tieto predstavujú dátumy pred Unixovou epochou (1. január 1970). Hoci sú matematicky platné, niektoré systémy nemusia správne spracovať negatívne časové pečiatky. To platí pre všetky tri formáty časových pečiatok.
-
Problém roku 2038: Štandardné unixové časové pečiatky (10 číslic) sa často ukladajú ako 32-bitové celé čísla, ktoré sa preplnia 19. januára 2038. Po tomto bode nebudú 32-bitové systémy schopné správne reprezentovať časy, pokiaľ nebudú upravené na použitie väčšieho typu celého čísla.
-
Úvahy o presnosti:
- Štandardné časové pečiatky (10 číslic) majú presnosť na úrovni sekundy, čo je dostatočné pre väčšinu každodenných aplikácií.
- Milisekundové časové pečiatky (13 číslic) poskytujú 1000-krát väčšiu presnosť, užitočnú pre aplikácie vyžadujúce presnejšie časovanie.
- Mikroskondové časové pečiatky (16 číslic) ponúkajú ešte jemnejšiu granularitu (1/1 000 000 sekundy), ktorá je potrebná pre vysokovýkonné počítačové aplikácie, vedecké aplikácie a niektoré finančné transakcie.
-
Extrémne veľké časové pečiatky: Veľmi vzdialené budúce dátumy nemusia byť reprezentovateľné v niektorých systémoch alebo môžu byť spracované nekonzistentne. To je obzvlášť relevantné pre milisekundové a mikrosekundové časové pečiatky, ktoré používajú väčšie číselné hodnoty.
-
Prestupné sekundy: Unixový čas nezohľadňuje prestupné sekundy, ktoré sa občas pridávajú do UTC na kompenzáciu nepravidelnej rotácie Zeme. To znamená, že unixový čas nie je presne synchronizovaný s astronomickým časom.
-
Úvahy o časových pásmach: Unixové časové pečiatky predstavujú okamihy v UTC. Pre konverziu na miestny čas je potrebné dodatočné informácie o časovom pásme.
-
Letný čas: Pri konverzii časových pečiatok na miestny čas je potrebné zohľadniť zložitosti prechodu na letný čas.
-
Zmätenie formátu časovej pečiatky: Bez správnej detekcie môže byť 13-ciferná milisekundová časová pečiatka nesprávne interpretovaná ako veľmi vzdialený budúci dátum, ak sa považuje za časovú pečiatku založenú na sekundách. Náš prevodník tomu zabraňuje automatickou detekciou formátu na základe dĺžky číslic.
Prípadové štúdie
Unixové časové pečiatky rôznych presností sa používajú v mnohých aplikáciách naprieč počítačmi a správou dát:
-
Záznamy v databázach: Časové pečiatky sa bežne používajú na zaznamenávanie, kedy boli záznamy vytvorené alebo upravené.
- Štandardné časové pečiatky (10 číslic) sú často dostatočné pre všeobecné databázové aplikácie.
- Milisekundové časové pečiatky (13 číslic) sa používajú, keď je potrebné presnejšie usporiadanie udalostí.
-
Webový vývoj: HTTP hlavičky, cookies a mechanizmy cache často používajú unixové časové pečiatky.
- Funkcia
Date.now()
v JavaScripte vracia milisekundové časové pečiatky (13 číslic).
- Funkcia
-
Logovacie súbory: Systémové logy typicky zaznamenávajú udalosti s unixovými časovými pečiatkami pre presné chronologické usporiadanie.
- Systémy s vysokou frekvenciou logovania môžu používať milisekundovú alebo mikrosekundovú presnosť.
-
Systémy správy verzií: Git a iné systémy správy verzií používajú časové pečiatky na zaznamenávanie, kedy boli vykonané zmeny.
-
API odpovede: Mnohé webové API obsahujú časové pečiatky vo svojich odpovediach na označenie, kedy boli dáta generované alebo kedy boli zdroje naposledy upravené.
- REST API často používajú milisekundové časové pečiatky.
-
Súborové systémy: Časy vytvorenia a úpravy súborov sa často ukladajú ako unixové časové pečiatky.
-
Správa relácií: Webové aplikácie používajú časové pečiatky na určenie, kedy by sa mali relácie používateľov vypršať.
-
Analýza dát: Časové pečiatky poskytujú štandardizovaný spôsob práce s časovými údajmi v analytických aplikáciách.
-
Obchodovanie s vysokou frekvenciou: Finančné systémy často vyžadujú mikrosekundovú presnosť (16 číslic) na presné usporiadanie transakcií.
-
Vedecké merania: Výskumné zariadenia môžu zaznamenávať pozorovania s mikrosekundovou presnosťou pre presnú časovú analýzu.
Alternatívy
Hoci unixové časové pečiatky sú široko používané, existujú alternatívne formáty časového zobrazenia, ktoré môžu byť vhodnejšie v určitých kontextoch:
-
ISO 8601: Štandardizovaný reťazcový formát (napr. "2021-01-01T00:00:00Z"), ktorý je ľahko čitateľný a zároveň zachováva triediteľnosť. Často sa preferuje pre výmenu dát a aplikácie orientované na používateľov.
-
RFC 3339: Profil ISO 8601 používaný v internetových protokoloch, s prísnejšími požiadavkami na formátovanie.
-
Ľahko čitateľné formáty: Lokalizované dátové reťazce (napr. "1. január 2021") sú vhodnejšie pre priamu interakciu s používateľom, ale menej vhodné na výpočty.
-
Microsoft FILETIME: 64-bitová hodnota predstavujúca počet intervalov 100 nanosekúnd od 1. januára 1601, používaná v systémoch Windows.
-
Juliánske číslo dňa: Používa sa v astronómii a niektorých vedeckých aplikáciách, počítajúc dni od 1. januára 4713 pred naším letopočtom.
Voľba formátu času závisí od faktorov, ako sú:
- Požadovaná presnosť
- Potreby ľudskej čitateľnosti
- Obmedzenia ukladania
- Kompatibilita s existujúcimi systémami
- Rozsah dátumov, ktoré je potrebné reprezentovať
História
Koncept unixového času vznikol pri vývoji operačného systému Unix v Bell Labs na konci 60. a začiatku 70. rokov. Rozhodnutie použiť 1. január 1970 ako epochu bolo do istej miery náhodné, ale praktické pre daný čas – bolo dostatočne nedávne, aby minimalizovalo požiadavky na ukladanie dátumov, ale dostatočne vzdialené v minulosti, aby bolo užitočné pre historické dáta.
Pôvodná implementácia používala 32-bitové celé číslo na ukladanie počtu sekúnd, čo bolo dostatočné pre očakávanú životnosť unixových systémov v tom čase. Toto rozhodnutie však viedlo k problému roku 2038 (niekedy nazývanému "Y2K38" alebo "Unix Millennium Bug"), pretože 32-bitové celé čísla môžu reprezentovať len dátumy do 19. januára 2038.
Keď sa počítačové potreby vyvíjali, stala sa potrebná vyššia presnosť časových pečiatok:
-
Milisekundová presnosť (13 číslic) sa stala bežnou s nástupom interaktívneho počítačovania a potrebou merať reakčný čas používateľského rozhrania.
-
Mikroskondová presnosť (16 číslic) sa objavila s vysokovýkonnými počítačovými aplikáciami a systémami vyžadujúcimi extrémne presné časovanie.
Keď sa unixové a unixovým podobné operačné systémy stali populárnymi, unixová časová pečiatka sa stala de facto štandardom pre reprezentáciu času v počítačoch. Bola prijatá mnohými programovacími jazykmi, databázami a aplikáciami, pričom sa rozšírila ďaleko za svoj pôvodný unixový prostredie.
Moderné systémy čoraz častejšie používajú 64-bitové celé čísla pre časové pečiatky, čo rozširuje reprezentovateľný rozsah na približne 292 miliárd rokov v oboch smeroch od epochy, efektívne riešiac problém roku 2038. Avšak staršie systémy a aplikácie môžu byť stále zraniteľné.
Jednoduchosť a užitočnosť unixovej časovej pečiatky zabezpečili jej pokračujúcu relevantnosť napriek vývoju sofistikovanejších formátov reprezentácie času. Zostáva základným konceptom v počítačoch, ktorý podporuje veľkú časť našej digitálnej infraštruktúry.
Príklady kódu
Tu sú príklady, ako konvertovať unixové časové pečiatky rôznych presností na ľahko čitateľné dátumy v rôznych programovacích jazykoch:
1// Konverzia časovej pečiatky v JavaScripte s automatickou detekciou formátu
2function convertTimestamp(timestamp, use12Hour = false) {
3 // Prevod reťazca na číslo, ak je to potrebné
4 const numericTimestamp = Number(timestamp);
5
6 // Detekcia formátu časovej pečiatky na základe dĺžky číslic
7 let date;
8 if (timestamp.length === 16) {
9 // Mikroskondová presnosť (delenie 1 000 000, aby sa dostali sekundy)
10 date = new Date(numericTimestamp / 1000);
11 console.log("Detekované: Mikroskondová presnosť časovej pečiatky");
12 } else if (timestamp.length === 13) {
13 // Milisekundová presnosť
14 date = new Date(numericTimestamp);
15 console.log("Detekované: Milisekundová presnosť časovej pečiatky");
16 } else if (timestamp.length === 10) {
17 // Štandardná unixová časová pečiatka (sekundy)
18 date = new Date(numericTimestamp * 1000);
19 console.log("Detekované: Štandardná unixová časová pečiatka (sekundy)");
20 } else {
21 throw new Error("Neplatný formát časovej pečiatky. Očakávané 10, 13 alebo 16 číslic.");
22 }
23
24 // Možnosti formátovania
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 // Prevod na reťazec pomocou formátovania miestneho jazyka
37 return date.toLocaleString(undefined, options);
38}
39
40// Príklad použitia
41try {
42 // Štandardná unixová časová pečiatka (10 číslic)
43 console.log(convertTimestamp("1609459200", false));
44
45 // Milisekundová presnosť (13 číslic)
46 console.log(convertTimestamp("1609459200000", false));
47
48 // Mikroskondová presnosť (16 číslic)
49 console.log(convertTimestamp("1609459200000000", true));
50} catch (error) {
51 console.error(error.message);
52}
53
1# Konverzia časovej pečiatky v Pythone s automatickou detekciou formátu
2import datetime
3
4def convert_timestamp(timestamp, use_12hour=False):
5 # Prevod na celé číslo
6 timestamp = str(timestamp).strip()
7 numeric_timestamp = int(timestamp)
8
9 # Detekcia formátu časovej pečiatky na základe dĺžky číslic
10 if len(timestamp) == 16:
11 # Mikroskondová presnosť (delenie 1 000 000, aby sa dostali sekundy)
12 date = datetime.datetime.fromtimestamp(numeric_timestamp / 1000000)
13 print("Detekované: Mikroskondová presnosť časovej pečiatky")
14 elif len(timestamp) == 13:
15 # Milisekundová presnosť (delenie 1 000, aby sa dostali sekundy)
16 date = datetime.datetime.fromtimestamp(numeric_timestamp / 1000)
17 print("Detekované: Milisekundová presnosť časovej pečiatky")
18 elif len(timestamp) == 10:
19 # Štandardná unixová časová pečiatka (sekundy)
20 date = datetime.datetime.fromtimestamp(numeric_timestamp)
21 print("Detekované: Štandardná unixová časová pečiatka (sekundy)")
22 else:
23 raise ValueError("Neplatný formát časovej pečiatky. Očakávané 10, 13 alebo 16 číslic.")
24
25 # Formátovanie reťazca dátumu
26 if use_12hour:
27 format_string = "%A, %B %d, %Y %I:%M:%S %p" # 12-hodinový formát s AM/PM
28 else:
29 format_string = "%A, %B %d, %Y %H:%M:%S" # 24-hodinový formát
30
31 return date.strftime(format_string)
32
33# Príklad použitia
34try:
35 # Štandardná unixová časová pečiatka (10 číslic)
36 print(convert_timestamp("1609459200", False))
37
38 # Milisekundová presnosť (13 číslic)
39 print(convert_timestamp("1609459200000", False))
40
41 # Mikroskondová presnosť (16 číslic)
42 print(convert_timestamp("1609459200000000", True))
43except ValueError as e:
44 print(e)
45
1<?php
2// Konverzia časovej pečiatky v PHP s automatickou detekciou formátu
3function convertTimestamp($timestamp, $use12Hour = false) {
4 // Zabezpečiť, aby časová pečiatka bola reťazec pre kontrolu dĺžky
5 $timestamp = trim((string)$timestamp);
6
7 // Detekcia formátu časovej pečiatky na základe dĺžky číslic
8 if (strlen($timestamp) === 16) {
9 // Mikroskondová presnosť (delenie 1 000 000, aby sa dostali sekundy)
10 $seconds = $numericTimestamp / 1000000;
11 echo "Detekované: Mikroskondová presnosť časovej pečiatky\n";
12 } elseif (strlen($timestamp) === 13) {
13 // Milisekundová presnosť
14 $seconds = $numericTimestamp / 1000;
15 echo "Detekované: Milisekundová presnosť časovej pečiatky\n";
16 } elseif (strlen($timestamp) === 10) {
17 // Štandardná unixová časová pečiatka (sekundy)
18 $seconds = $numericTimestamp;
19 echo "Detekované: Štandardná unixová časová pečiatka (sekundy)\n";
20 } else {
21 throw new Exception("Neplatný formát časovej pečiatky. Očakávané 10, 13 alebo 16 číslic.");
22 }
23
24 // Formátovací reťazec
25 $formatString = $use12Hour
26 ? 'l, F j, Y g:i:s A' // 12-hodinový formát s AM/PM
27 : 'l, F j, Y H:i:s'; // 24-hodinový formát
28
29 // Prevod a formátovanie dátumu
30 return date($formatString, $seconds);
31}
32
33// Príklad použitia
34try {
35 // Štandardná unixová časová pečiatka (10 číslic)
36 echo convertTimestamp("1609459200", false) . "\n";
37
38 // Milisekundová presnosť (13 číslic)
39 echo convertTimestamp("1609459200000", false) . "\n";
40
41 // Mikroskondová presnosť (16 číslic)
42 echo convertTimestamp("1609459200000000", true) . "\n";
43} catch (Exception $e) {
44 echo $e->getMessage() . "\n";
45}
46?>
47
1// Konverzia časovej pečiatky v Jave s automatickou detekciou formátu
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 // Orezanie vstupu
10 timestamp = timestamp.trim();
11
12 // Detekcia formátu časovej pečiatky na základe dĺžky číslic
13 LocalDateTime dateTime;
14 if (timestamp.length() == 16) {
15 // Mikroskondová presnosť (delenie 1 000 000, aby sa dostali sekundy)
16 long microseconds = Long.parseLong(timestamp);
17 Instant instant = Instant.ofEpochSecond(0, microseconds * 1000); // Konverzia na nanosekundy
18 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
19 System.out.println("Detekované: Mikroskondová presnosť časovej pečiatky");
20 } else if (timestamp.length() == 13) {
21 // Milisekundová presnosť
22 long milliseconds = Long.parseLong(timestamp);
23 Instant instant = Instant.ofEpochMilli(milliseconds);
24 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
25 System.out.println("Detekované: Milisekundová presnosť časovej pečiatky");
26 } else if (timestamp.length() == 10) {
27 // Štandardná unixová časová pečiatka (sekundy)
28 long seconds = Long.parseLong(timestamp);
29 Instant instant = Instant.ofEpochSecond(seconds);
30 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
31 System.out.println("Detekované: Štandardná unixová časová pečiatka (sekundy)");
32 } else {
33 throw new IllegalArgumentException("Neplatný formát časovej pečiatky. Očakávané 10, 13 alebo 16 číslic.");
34 }
35
36 // Vytvorenie formátovača na základe požadovaného formátu
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 // Formátovanie dátumu
42 return dateTime.format(formatter);
43 }
44
45 public static void main(String[] args) {
46 try {
47 // Štandardná unixová časová pečiatka (10 číslic)
48 System.out.println(convertTimestamp("1609459200", false));
49
50 // Milisekundová presnosť (13 číslic)
51 System.out.println(convertTimestamp("1609459200000", false));
52
53 // Mikroskondová presnosť (16 číslic)
54 System.out.println(convertTimestamp("1609459200000000", true));
55 } catch (IllegalArgumentException e) {
56 System.err.println(e.getMessage());
57 }
58 }
59}
60
1// Konverzia časovej pečiatky v C# s automatickou detekciou formátu
2using System;
3
4class TimestampConverter
5{
6 public static string ConvertTimestamp(string timestamp, bool use12Hour)
7 {
8 // Orezanie vstupu
9 timestamp = timestamp.Trim();
10
11 // Detekcia formátu časovej pečiatky na základe dĺžky číslic
12 DateTime dateTime;
13 if (timestamp.Length == 16)
14 {
15 // Mikroskondová presnosť (delenie 1 000 000, aby sa dostali sekundy)
16 if (!double.TryParse(timestamp, out double microseconds))
17 throw new ArgumentException("Neplatný formát časovej pečiatky");
18
19 // Konverzia mikrosekúnd na DateTime
20 dateTime = DateTimeOffset.FromUnixTimeSeconds(0).DateTime.AddSeconds(microseconds / 1000000);
21 Console.WriteLine("Detekované: Mikroskondová presnosť časovej pečiatky");
22 }
23 else if (timestamp.Length == 13)
24 {
25 // Milisekundová presnosť
26 if (!long.TryParse(timestamp, out long milliseconds))
27 throw new ArgumentException("Neplatný formát časovej pečiatky");
28
29 dateTime = DateTimeOffset.FromUnixTimeMilliseconds(milliseconds).DateTime;
30 Console.WriteLine("Detekované: Milisekundová presnosť časovej pečiatky");
31 }
32 else if (timestamp.Length == 10)
33 {
34 // Štandardná unixová časová pečiatka (sekundy)
35 if (!long.TryParse(timestamp, out long seconds))
36 throw new ArgumentException("Neplatný formát časovej pečiatky");
37
38 dateTime = DateTimeOffset.FromUnixTimeSeconds(seconds).DateTime;
39 Console.WriteLine("Detekované: Štandardná unixová časová pečiatka (sekundy)");
40 }
41 else
42 {
43 throw new ArgumentException("Neplatný formát časovej pečiatky. Očakávané 10, 13 alebo 16 číslic.");
44 }
45
46 // Formátovací reťazec na základe preferencie 12-hodinového alebo 24-hodinového
47 string formatString = use12Hour
48 ? "dddd, MMMM d, yyyy h:mm:ss tt" // 12-hodinový formát s AM/PM
49 : "dddd, MMMM d, yyyy HH:mm:ss"; // 24-hodinový formát
50
51 // Vrátiť formátovaný reťazec dátumu
52 return dateTime.ToString(formatString);
53 }
54
55 static void Main()
56 {
57 try
58 {
59 // Štandardná unixová časová pečiatka (10 číslic)
60 Console.WriteLine(ConvertTimestamp("1609459200", false));
61
62 // Milisekundová presnosť (13 číslic)
63 Console.WriteLine(ConvertTimestamp("1609459200000", false));
64
65 // Mikroskondová presnosť (16 číslic)
66 Console.WriteLine(ConvertTimestamp("1609459200000000", true));
67 }
68 catch (ArgumentException e)
69 {
70 Console.WriteLine(e.Message);
71 }
72 }
73}
74
Riešenie okrajových prípadov
Pri práci s unixovými časovými pečiatkami rôznych presností je dôležité správne riešiť okrajové prípady. Tu je príklad, ktorý demonštruje komplexné spracovanie okrajových prípadov:
1// JavaScript komplexné riešenie okrajových prípadov pre viacero formátov časových pečiatok
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Validácia vstupu
4 if (timestamp === undefined || timestamp === null || timestamp === '') {
5 return "Chyba: Prázdna alebo nedefinovaná časová pečiatka";
6 }
7
8 // Zabezpečiť, aby časová pečiatka bola reťazec pre kontrolu dĺžky
9 const timestampStr = String(timestamp).trim();
10
11 // Skontrolovať, či časová pečiatka obsahuje iba číslice
12 if (!/^\d+$/.test(timestampStr)) {
13 return "Chyba: Časová pečiatka musí obsahovať iba číslice";
14 }
15
16 // Detekcia formátu na základe dĺžky
17 let date;
18 try {
19 if (timestampStr.length === 16) {
20 // Mikroskondová presnosť
21 const microseconds = Number(timestampStr);
22 date = new Date(microseconds / 1000); // Konverzia na milisekundy
23 console.log("Spracovávanie mikroskondovej časovej pečiatky (16 číslic)");
24
25 // Skontrolovať neplatný dátum
26 if (isNaN(date.getTime())) {
27 return "Chyba: Neplatná mikroskondová časová pečiatka";
28 }
29 } else if (timestampStr.length === 13) {
30 // Milisekundová presnosť
31 const milliseconds = Number(timestampStr);
32 date = new Date(milliseconds);
33 console.log("Spracovávanie milisekundovej časovej pečiatky (13 číslic)");
34
35 // Skontrolovať neplatný dátum
36 if (isNaN(date.getTime())) {
37 return "Chyba: Neplatná milisekundová časová pečiatka";
38 }
39 } else if (timestampStr.length === 10) {
40 // Štandardná unixová časová pečiatka (sekundy)
41 const seconds = Number(timestampStr);
42 date = new Date(seconds * 1000);
43 console.log("Spracovávanie štandardnej časovej pečiatky (10 číslic)");
44
45 // Skontrolovať neplatný dátum
46 if (isNaN(date.getTime())) {
47 return "Chyba: Neplatná štandardná časová pečiatka";
48 }
49
50 // Skontrolovať problém roku 2038 (pre 32-bitové systémy)
51 const maxInt32 = 2147483647; // Maximálna hodnota pre 32-bitové celé číslo
52 if (seconds > maxInt32) {
53 console.warn("Upozornenie: Časová pečiatka presahuje limit 32-bitového celého čísla (problém Y2K38)");
54 }
55 } else {
56 return "Chyba: Neplatná dĺžka časovej pečiatky. Očakávané 10, 13 alebo 16 číslic.";
57 }
58
59 // Formátovanie dátumu
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 "Chyba pri konverzii časovej pečiatky: " + error.message;
74 }
75}
76
77// Testovanie s rôznymi okrajovými prípadmi
78console.log(safeConvertTimestamp("1609459200")); // Štandardná (10 číslic)
79console.log(safeConvertTimestamp("1609459200000")); // Milisekundy (13 číslic)
80console.log(safeConvertTimestamp("1609459200000000")); // Mikroskondy (16 číslic)
81console.log(safeConvertTimestamp("abc123")); // Nečíselné
82console.log(safeConvertTimestamp("12345")); // Neplatná dĺžka
83console.log(safeConvertTimestamp("9999999999999999")); // Veľmi veľká mikroskondová časová pečiatka
84console.log(safeConvertTimestamp("")); // Prázdny reťazec
85
Často kladené otázky
Čo je unixová časová pečiatka?
Unixová časová pečiatka je počet sekúnd, ktoré uplynuli od 1. januára 1970 (polnoc UTC/GMT), bez započítania prestupných sekúnd. Poskytuje kompaktné, jazykovo nezávislé zobrazenie konkrétneho okamihu v čase.
Ako funguje automatická detekcia formátu časovej pečiatky?
Prevodník automaticky detekuje formát časovej pečiatky na základe počtu číslic:
- 10 číslic: Štandardná unixová časová pečiatka (sekundy od epochy)
- 13 číslic: Milisekundová presnosť časovej pečiatky
- 16 číslic: Mikroskondová presnosť časovej pečiatky
Prečo by som potreboval milisekundovú alebo mikrosekundovú presnosť?
Milisekundová presnosť (13 číslic) je užitočná pre aplikácie vyžadujúce presnejšie časovanie, ako sú monitorovanie výkonu, sledovanie interakcií používateľov a niektoré finančné aplikácie. Mikroskondová presnosť (16 číslic) je potrebná pre vysokovýkonné počítačové aplikácie, vedecké aplikácie a systémy obchodovania s vysokou frekvenciou, kde je kritické extrémne presné časovanie.
Môžem konvertovať dátumy pred rokom 1970 pomocou unixových časových pečiatok?
Áno, dátumy pred 1. januárom 1970 sú reprezentované pomocou negatívnych časových pečiatok. Niektoré systémy však nemusia správne spracovať negatívne časové pečiatky, preto je dôležité otestovať túto funkčnosť, ak potrebujete pracovať s historickými dátami.
Čo je problém roku 2038?
Problém roku 2038 nastáva, pretože mnohé systémy ukladajú unixové časové pečiatky ako 32-bitové celé čísla, ktoré môžu reprezentovať len dátumy do 19. januára 2038 (03:14:07 UTC). Po tomto bode sa celé číslo preplní, čo môže potenciálne spôsobiť zlyhanie systému. Moderné systémy čoraz častejšie používajú 64-bitové celé čísla, aby sa tomuto problému vyhli.
Ako môžem riešiť konverzie časových pásiem s unixovými časovými pečiatkami?
Unixové časové pečiatky sú vždy v UTC (Koordinovaný svetový čas). Na konverziu do konkrétneho časového pásma je potrebné aplikovať príslušný posun po konverzii časovej pečiatky na dátum. Väčšina programovacích jazykov poskytuje vstavané funkcie na spracovanie konverzií časových pásiem.
Aký je rozdiel medzi unixovým časom a ISO 8601?
Unixový čas je číselné zobrazenie (sekundy od epochy), zatiaľ čo ISO 8601 je reťazcový formát (napr. "2021-01-01T00:00:00Z"). Unixový čas je kompaktný a jednoduchší na použitie pri výpočtoch, zatiaľ čo ISO 8601 je viac ľahko čitateľný a sebaopísujúci.
Aká je presnosť unixových časových pečiatok?
Štandardné unixové časové pečiatky majú presnosť na úrovni sekundy. Pre aplikácie vyžadujúce väčšiu presnosť poskytujú milisekundové časové pečiatky (13 číslic) presnosť na 1/1000 sekundy a mikroskondové časové pečiatky (16 číslic) presnosť na 1/1 000 000 sekundy.
Zohľadňujú unixové časové pečiatky prestupné sekundy?
Nie, unixový čas je definovaný ako počet sekúnd od epochy, bez započítania prestupných sekúnd. To znamená, že počas prestupnej sekundy sa unixová časová pečiatka nezvýši. To môže spôsobiť problémy v aplikáciách vyžadujúcich presný astronomický čas.
Môžem použiť unixové časové pečiatky na plánovanie budúcich udalostí?
Áno, unixové časové pečiatky sa široko používajú na plánovanie. Avšak pre veľmi vzdialené budúce dátumy buďte si vedomí potenciálnych obmedzení, ako je problém roku 2038 pre 32-bitové systémy a spracovanie zmien časových pásiem a prechodov na letný čas.
Odkazy
-
"Unix Time." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time
-
"Problém roku 2038." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "Zložitosti kalendárneho času." 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: Dátum a čas na internete: Časové pečiatky." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., a Dennis M. Ritchie. "Programovací jazyk C." Prentice Hall, 1988.
-
"Presné časovanie v vysokovýkonnom počítačovaní." ACM Computing Surveys, https://dl.acm.org/doi/10.1145/3232678
-
"Reprezentácia času vo finančných systémoch." Journal of Financial Technology, https://www.fintech-journal.com/time-representation
Skúste náš prevodník časových pečiatok teraz, aby ste ľahko konvertovali unixové časové pečiatky akejkoľvek presnosti na ľahko čitateľné dátumy. Či už pracujete so štandardnými unixovými časovými pečiatkami, milisekundovou presnosťou alebo mikrosekundovou presnosťou, náš nástroj automaticky detekuje formát a poskytuje presné konverzie.
Spätná väzba
Kliknite na spätnú väzbu toastu, aby ste začali poskytovať spätnú väzbu o tomto nástroji
Súvisiace nástroje
Objavte ďalšie nástroje, ktoré by mohli byť užitočné pre vašu pracovnú postupnosť