Unix-tidsstempel til dato-konverter: 12/24 timers format understøttelse
Konverter Unix-tidsstempler til menneskelæselige datoer og tidspunkter. Vælg mellem 12-timers og 24-timers tidsformater med dette enkle, brugervenlige konverteringsværktøj.
Unix Tidsstempel Konverter
Konverteret Dato & Tid
Dokumentation
Unix Timestamp Converter
Introduktion
En Unix-tidsstempel (også kendt som POSIX-tid eller Epoch-tid) er et system til at beskrive et tidspunkt. Det er antallet af sekunder, der er gået siden 1. januar 1970 (midnat UTC/GMT), uden at tælle skudsekunder. Unix-tidsstempler bruges bredt i computersystemer og programmeringssprog, da de giver en kompakt, sprog-uafhængig repræsentation af et specifikt øjeblik i tiden.
Denne tidsstempel-til-dato-konverter registrerer automatisk og behandler tidsstempler af forskellige længder, herunder mikrosekund-præcision (16 cifre), millisekund-præcision (13 cifre) og standard Unix-tidsstempler (10 cifre). Værktøjet identificerer tidsstempel-formatet baseret på inputlængden, konverterer det til et menneskeligt læsbart dato- og tidsformat og viser resultatet uden at kræve, at brugerne angiver tidsstempeltypen. Det understøtter både 12-timers (AM/PM) og 24-timers tidsformater for at imødekomme forskellige regionale og personlige præferencer.
Hvordan Unix Tidsstempler Fungerer
Unix-tidsstempler beregnes som antallet af sekunder siden Unix Epoch (1. januar 1970, 00:00:00 UTC). Dette gør dem særligt nyttige til at beregne tidsforskelle og til at gemme datoer i et kompakt format.
Den matematiske konvertering fra et Unix-tidsstempel til en kalenderdato involverer flere trin:
- Start med Unix Epoch (1. januar 1970, 00:00:00 UTC)
- Tilføj antallet af sekunder i tidsstemplet
- Tag højde for skudår, varierende månedslængder og andre kalenderkompleksiteter
- Anvend tidszonejusteringer, hvis nødvendigt
For eksempel repræsenterer Unix-tidsstemplet 1609459200
fredag, den 1. januar 2021, 00:00:00 UTC.
Konverteringsformlen kan udtrykkes som:
De fleste programmeringssprog og operativsystemer tilbyder indbyggede funktioner til at håndtere denne konvertering, hvilket abstraherer de komplekse kalenderberegninger.
Tidsstempel Formater og Automatisk Registrering
Vores konverter understøtter tre almindelige tidsstempel-formater, som automatisk registreres baseret på antallet af cifre:
-
Standard Unix Tidsstempel (10 cifre): Repræsenterer sekunder siden Unix Epoch. Eksempel:
1609459200
(1. januar 2021, 00:00:00 UTC) -
Millisekund-præcision (13 cifre): Repræsenterer millisekunder siden Unix Epoch. Eksempel:
1609459200000
(1. januar 2021, 00:00:00 UTC) -
Mikrosekund-præcision (16 cifre): Repræsenterer mikrosekunder siden Unix Epoch. Eksempel:
1609459200000000
(1. januar 2021, 00:00:00 UTC)
Den automatiske registrering fungerer ved at analysere længden af inputtet:
- Hvis inputtet indeholder 10 cifre, behandles det som et standard Unix-tidsstempel (sekunder)
- Hvis inputtet indeholder 13 cifre, behandles det som et millisekund-tidsstempel
- Hvis inputtet indeholder 16 cifre, behandles det som et mikrosekund-tidsstempel
Denne automatiske registrering fjerner behovet for, at brugerne skal angive tidsstempeltypen, hvilket gør værktøjet mere brugervenligt og effektivt.
Tidsformatmuligheder
Denne konverter tilbyder to tidsformatmuligheder:
-
24-timers format (nogle gange kaldet "militærtid"): Timerne spænder fra 0 til 23, og der er ingen AM/PM-betegnelse. For eksempel repræsenteres kl. 15:00 som 15:00.
-
12-timers format: Timerne spænder fra 1 til 12, med AM (ante meridiem) for tider fra midnat til middag, og PM (post meridiem) for tider fra middag til midnat. For eksempel repræsenteres 15:00 i 24-timers format som 3:00 PM.
Valget mellem disse formater er stort set et spørgsmål om regional konvention og personlig præference:
- 24-timers formatet er almindeligt anvendt i størstedelen af Europa, Latinamerika og Asien, samt i videnskabelige, militære og medicinske sammenhænge verden over.
- 12-timers formatet er udbredt i USA, Canada, Australien og nogle andre engelsktalende lande til daglig brug.
Kanttilfælde og Begrænsninger
Når man arbejder med Unix-tidsstempler af forskellige præcisionsniveauer, er det vigtigt at være opmærksom på flere kanttilfælde og begrænsninger:
-
Negative tidsstempler: Disse repræsenterer datoer før Unix Epoch (1. januar 1970). Selvom de er matematikmæssigt gyldige, kan nogle systemer muligvis ikke håndtere negative tidsstempler korrekt. Dette gælder for alle tre tidsstempel-formater.
-
År 2038 Problemet: Standard Unix-tidsstempler (10 cifre) gemmes ofte som 32-bit signed integers, hvilket vil overflyde den 19. januar 2038. Efter dette tidspunkt vil 32-bit systemer ikke være i stand til at repræsentere tid korrekt, medmindre de ændres til at bruge en større heltals-type.
-
Præcisionsovervejelser:
- Standard tidsstempler (10 cifre) har sekund-niveau præcision, hvilket er tilstrækkeligt til de fleste hverdagssituationer.
- Millisekund tidsstempler (13 cifre) giver 1000 gange mere præcision, nyttigt til applikationer, der kræver mere nøjagtig timing.
- Mikrosekund tidsstempler (16 cifre) tilbyder endnu finere granularitet (1/1.000.000 sekund), hvilket er nødvendigt for højtydende computing, videnskabelige applikationer og visse finansielle transaktioner.
-
Ekstremt store tidsstempler: Meget fjerne fremtidige datoer kan muligvis ikke være repræsentable i nogle systemer, eller kan håndteres inkonsekvent. Dette er især relevant for millisekund- og mikrosekund-tidsstempler, som bruger større numeriske værdier.
-
Skudsekunder: Unix-tid tager ikke højde for skudsekunder, som lejlighedsvis tilføjes til UTC for at kompensere for Jordens uregelmæssige rotation. Dette betyder, at Unix-tid ikke er præcist synkroniseret med astronomisk tid.
-
Tidszoneovervejelser: Unix-tidsstempler repræsenterer øjeblikke i UTC. Konvertering til lokal tid kræver yderligere tidszoneinformation.
-
Sommertid: Når man konverterer tidsstempler til lokal tid, skal kompleksiteten ved overgange til sommertid tages i betragtning.
-
Forvirring om tidsstempel-format: Uden korrekt registrering kan et 13-cifret millisekund-tidsstempel fejlagtigt blive tolket som en meget fjern fremtidig dato, hvis det behandles som et sekund-baseret tidsstempel. Vores konverter forhindrer dette ved automatisk at registrere formatet baseret på cifrenes længde.
Anvendelsestilfælde
Unix-tidsstempler af forskellige præcisionsniveauer bruges i mange applikationer på tværs af computing og datastyring:
-
Databaseposter: Tidsstempler bruges ofte til at registrere, hvornår poster blev oprettet eller ændret.
- Standard tidsstempler (10 cifre) er ofte tilstrækkelige til generelle databaseapplikationer.
- Millisekund tidsstempler (13 cifre) bruges, når mere præcis rækkefølge af begivenheder er nødvendig.
-
Webudvikling: HTTP-headere, cookies og caching-mekanismer bruger ofte Unix-tidsstempler.
- JavaScripts
Date.now()
returnerer millisekund tidsstempler (13 cifre).
- JavaScripts
-
Logfiler: Systemlogfiler registrerer typisk begivenheder med Unix tidsstempler for præcis kronologisk rækkefølge.
- Højfrekvente logningssystemer kan bruge millisekund eller mikrosekund præcision.
-
Versionskontrolsystemer: Git og andre VCS bruger tidsstempler til at registrere, hvornår commits blev foretaget.
-
API-responser: Mange web-API'er inkluderer tidsstempler i deres svar for at angive, hvornår data blev genereret eller hvornår ressourcer sidst blev ændret.
- REST API'er bruger ofte millisekund præcisions tidsstempler.
-
Filsystemer: Oprettelses- og ændringstider for filer gemmes ofte som Unix tidsstempler.
-
Sessionstyring: Webapplikationer bruger tidsstempler til at bestemme, hvornår brugersessioner skal udløbe.
-
Dataanalyse: Tidsstempler giver en standardiseret måde at arbejde med tidsdata i analyseapplikationer.
-
Højfrekvent handel: Finansielle systemer kræver ofte mikrosekund præcision (16 cifre) for nøjagtigt at sekventere transaktioner.
-
Videnskabelige målinger: Forskningsudstyr kan registrere observationer med mikrosekund præcision for nøjagtig tidsanalyse.
Alternativer
Selvom Unix tidsstempler er meget anvendt, findes der alternative tidsrepræsentationsformater, der kan være mere passende i visse sammenhænge:
-
ISO 8601: Et standardiseret strengformat (f.eks. "2021-01-01T00:00:00Z"), der er menneskeligt læsbart, mens det opretholder sortérbarhed. Det er ofte foretrukket til dataudveksling og brugerorienterede applikationer.
-
RFC 3339: En profil af ISO 8601, der bruges i internetprotokoller, med strengere formateringskrav.
-
Menneskeligt læsbare formater: Lokaliserede datostrings (f.eks. "1. januar 2021") er mere passende til direkte brugerinteraktion, men er mindre egnede til beregning.
-
Microsoft FILETIME: En 64-bit værdi, der repræsenterer antallet af 100-nanosekunders intervaller siden 1. januar 1601, som bruges i Windows-systemer.
-
Julian Day Number: Bruges i astronomi og nogle videnskabelige applikationer, der tæller dage siden 1. januar 4713 f.Kr.
Valget af tidsformat afhænger af faktorer som:
- Krævet præcision
- Behov for menneskelig læsbarhed
- Lagringsbegrænsninger
- Kompatibilitet med eksisterende systemer
- Omfanget af datoer, der skal repræsenteres
Historie
Konceptet om Unix tid stammer fra udviklingen af Unix-operativsystemet hos Bell Labs i slutningen af 1960'erne og begyndelsen af 1970'erne. Beslutningen om at bruge 1. januar 1970 som epoch var noget vilkårlig, men praktisk for tiden – det var nyligt nok til at minimere lagerkravene for interessante datoer, men langt nok tilbage til at være nyttigt for historiske data.
Den oprindelige implementering brugte en 32-bit signed integer til at gemme antallet af sekunder, hvilket var tilstrækkeligt til den forventede levetid for Unix-systemer på det tidspunkt. Imidlertid førte denne beslutning til År 2038 Problemet (nogle gange kaldet "Y2K38" eller "Unix Millennium Bug"), da 32-bit signed integers kun kan repræsentere datoer op til 19. januar 2038 (03:14:07 UTC).
Efterhånden som computingbehovene udviklede sig, blev tidsstempler med højere præcision nødvendige:
-
Millisekund-præcision (13 cifre) blev almindeligt med fremkomsten af interaktive computere og behovet for at måle responsiviteten af brugergrænseflader.
-
Mikrosekund-præcision (16 cifre) opstod med højtydende computing-applikationer og systemer, der krævede ekstremt præcis timing.
Som Unix og Unix-lignende operativsystemer fik popularitet, blev Unix-tidsstemplet en de facto standard for at repræsentere tid i computing. Det blev vedtaget af mange programmeringssprog, databaser og applikationer, hvilket strakte sig langt ud over det oprindelige Unix-miljø.
Moderne systemer bruger i stigende grad 64-bit integers til tidsstempler, hvilket udvider det repræsentable område til cirka 292 milliarder år i begge retninger fra epoch, hvilket effektivt løser År 2038 Problemet. Dog kan ældre systemer og applikationer stadig være sårbare.
Unix-tidsstempellets enkelhed og nytte har sikret dets fortsatte relevans på trods af udviklingen af mere sofistikerede tidsrepræsentationsformater. Det forbliver et grundlæggende koncept i computing, der understøtter meget af vores digitale infrastruktur.
Kodeeksempler
Her er eksempler på, hvordan man konverterer Unix-tidsstempler af forskellige præcisionsniveauer til menneskeligt læsbare datoer i forskellige programmeringssprog:
1// JavaScript tidsstempel konvertering med automatisk formatregistrering
2function convertTimestamp(timestamp, use12Hour = false) {
3 // Konverter streng til nummer hvis nødvendigt
4 const numericTimestamp = Number(timestamp);
5
6 // Registrer tidsstempel format baseret på cifrenes længde
7 let date;
8 if (timestamp.length === 16) {
9 // Mikrosekund-præcision (del med 1.000.000 for at få sekunder)
10 date = new Date(numericTimestamp / 1000);
11 console.log("Registreret: Mikrosekund-præcision tidsstempel");
12 } else if (timestamp.length === 13) {
13 // Millisekund-præcision
14 date = new Date(numericTimestamp);
15 console.log("Registreret: Millisekund-præcision tidsstempel");
16 } else if (timestamp.length === 10) {
17 // Standard Unix tidsstempel (sekunder)
18 date = new Date(numericTimestamp * 1000);
19 console.log("Registreret: Standard Unix tidsstempel (sekunder)");
20 } else {
21 throw new Error("Ugyldigt tidsstempel format. Forventede 10, 13 eller 16 cifre.");
22 }
23
24 // Formatmuligheder
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 // Konverter til streng ved hjælp af lokal formatering
37 return date.toLocaleString(undefined, options);
38}
39
40// Eksempel på brug
41try {
42 // Standard Unix tidsstempel (10 cifre)
43 console.log(convertTimestamp("1609459200", false));
44
45 // Millisekund-præcision (13 cifre)
46 console.log(convertTimestamp("1609459200000", false));
47
48 // Mikrosekund-præcision (16 cifre)
49 console.log(convertTimestamp("1609459200000000", true));
50} catch (error) {
51 console.error(error.message);
52}
53
1# Python tidsstempel konvertering med automatisk formatregistrering
2import datetime
3
4def convert_timestamp(timestamp, use_12hour=False):
5 # Konverter til heltal
6 timestamp = str(timestamp).strip()
7 numeric_timestamp = int(timestamp)
8
9 # Registrer tidsstempel format baseret på cifrenes længde
10 if len(timestamp) == 16:
11 # Mikrosekund-præcision (del med 1.000.000 for at få sekunder)
12 date = datetime.datetime.fromtimestamp(numeric_timestamp / 1000000)
13 print("Registreret: Mikrosekund-præcision tidsstempel")
14 elif len(timestamp) == 13:
15 # Millisekund-præcision (del med 1.000 for at få sekunder)
16 date = datetime.datetime.fromtimestamp(numeric_timestamp / 1000)
17 print("Registreret: Millisekund-præcision tidsstempel")
18 elif len(timestamp) == 10:
19 # Standard Unix tidsstempel (sekunder)
20 date = datetime.datetime.fromtimestamp(numeric_timestamp)
21 print("Registreret: Standard Unix tidsstempel (sekunder)")
22 else:
23 raise ValueError("Ugyldigt tidsstempel format. Forventede 10, 13 eller 16 cifre.")
24
25 # Format dato-strengen
26 if use_12hour:
27 format_string = "%A, %B %d, %Y %I:%M:%S %p" # 12-timers format med AM/PM
28 else:
29 format_string = "%A, %B %d, %Y %H:%M:%S" # 24-timers format
30
31 return date.strftime(format_string)
32
33# Eksempel på brug
34try:
35 # Standard Unix tidsstempel (10 cifre)
36 print(convert_timestamp("1609459200", False))
37
38 # Millisekund-præcision (13 cifre)
39 print(convert_timestamp("1609459200000", False))
40
41 # Mikrosekund-præcision (16 cifre)
42 print(convert_timestamp("1609459200000000", True))
43except ValueError as e:
44 print(e)
45
1<?php
2// PHP tidsstempel konvertering med automatisk formatregistrering
3function convertTimestamp($timestamp, $use12Hour = false) {
4 // Sørg for at tidsstemplet er en streng for længdekontrol
5 $timestamp = trim((string)$timestamp);
6
7 // Registrer tidsstempel format baseret på cifrenes længde
8 if (strlen($timestamp) === 16) {
9 // Mikrosekund-præcision (del med 1.000.000 for at få sekunder)
10 $seconds = $numericTimestamp / 1000000;
11 echo "Registreret: Mikrosekund-præcision tidsstempel\n";
12 } elseif (strlen($timestamp) === 13) {
13 // Millisekund-præcision
14 $seconds = $numericTimestamp / 1000;
15 echo "Registreret: Millisekund-præcision tidsstempel\n";
16 } elseif (strlen($timestamp) === 10) {
17 // Standard Unix tidsstempel (sekunder)
18 $seconds = $numericTimestamp;
19 echo "Registreret: Standard Unix tidsstempel (sekunder)\n";
20 } else {
21 throw new Exception("Ugyldigt tidsstempel format. Forventede 10, 13 eller 16 cifre.");
22 }
23
24 // Format-streng
25 $formatString = $use12Hour
26 ? 'l, F j, Y g:i:s A' // 12-timers format med AM/PM
27 : 'l, F j, Y H:i:s'; // 24-timers format
28
29 // Konverter og formatér datoen
30 return date($formatString, $seconds);
31}
32
33// Eksempel på brug
34try {
35 // Standard Unix tidsstempel (10 cifre)
36 echo convertTimestamp("1609459200", false) . "\n";
37
38 // Millisekund-præcision (13 cifre)
39 echo convertTimestamp("1609459200000", false) . "\n";
40
41 // Mikrosekund-præcision (16 cifre)
42 echo convertTimestamp("1609459200000000", true) . "\n";
43} catch (Exception $e) {
44 echo $e->getMessage() . "\n";
45}
46?>
47
1// Java tidsstempel konvertering med automatisk formatregistrering
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 // Trim input
10 timestamp = timestamp.trim();
11
12 // Registrer tidsstempel format baseret på cifrenes længde
13 LocalDateTime dateTime;
14 if (timestamp.length() == 16) {
15 // Mikrosekund-præcision (del med 1.000.000 for at få sekunder)
16 long microseconds = Long.parseLong(timestamp);
17 Instant instant = Instant.ofEpochSecond(0, microseconds * 1000); // Konverter til nanosekunder
18 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
19 System.out.println("Registreret: Mikrosekund-præcision tidsstempel");
20 } else if (timestamp.length() == 13) {
21 // Millisekund-præcision
22 long milliseconds = Long.parseLong(timestamp);
23 Instant instant = Instant.ofEpochMilli(milliseconds);
24 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
25 System.out.println("Registreret: Millisekund-præcision tidsstempel");
26 } else if (timestamp.length() == 10) {
27 // Standard Unix tidsstempel (sekunder)
28 long seconds = Long.parseLong(timestamp);
29 Instant instant = Instant.ofEpochSecond(seconds);
30 dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
31 System.out.println("Registreret: Standard Unix tidsstempel (sekunder)");
32 } else {
33 throw new IllegalArgumentException("Ugyldigt tidsstempel format. Forventede 10, 13 eller 16 cifre.");
34 }
35
36 // Opret formatter baseret på ønsket format
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 // Formatér datoen
42 return dateTime.format(formatter);
43 }
44
45 public static void main(String[] args) {
46 try {
47 // Standard Unix tidsstempel (10 cifre)
48 System.out.println(convertTimestamp("1609459200", false));
49
50 // Millisekund-præcision (13 cifre)
51 System.out.println(convertTimestamp("1609459200000", false));
52
53 // Mikrosekund-præcision (16 cifre)
54 System.out.println(convertTimestamp("1609459200000000", true));
55 } catch (IllegalArgumentException e) {
56 System.err.println(e.getMessage());
57 }
58 }
59}
60
1// C# tidsstempel konvertering med automatisk formatregistrering
2using System;
3
4class TimestampConverter
5{
6 public static string ConvertTimestamp(string timestamp, bool use12Hour)
7 {
8 // Trim input
9 timestamp = timestamp.Trim();
10
11 // Registrer tidsstempel format baseret på cifrenes længde
12 DateTime dateTime;
13 if (timestamp.Length == 16)
14 {
15 // Mikrosekund-præcision (del med 1.000.000 for at få sekunder)
16 if (!double.TryParse(timestamp, out double microseconds))
17 throw new ArgumentException("Ugyldigt tidsstempel format");
18
19 // Konverter mikrosekunder til DateTime
20 dateTime = DateTimeOffset.FromUnixTimeSeconds(0).DateTime.AddSeconds(microseconds / 1000000);
21 Console.WriteLine("Registreret: Mikrosekund-præcision tidsstempel");
22 }
23 else if (timestamp.Length == 13)
24 {
25 // Millisekund-præcision
26 if (!long.TryParse(timestamp, out long milliseconds))
27 throw new ArgumentException("Ugyldigt tidsstempel format");
28
29 dateTime = DateTimeOffset.FromUnixTimeMilliseconds(milliseconds).DateTime;
30 Console.WriteLine("Registreret: Millisekund-præcision tidsstempel");
31 }
32 else if (timestamp.Length == 10)
33 {
34 // Standard Unix tidsstempel (sekunder)
35 if (!long.TryParse(timestamp, out long seconds))
36 throw new ArgumentException("Ugyldigt tidsstempel format");
37
38 dateTime = DateTimeOffset.FromUnixTimeSeconds(seconds).DateTime;
39 Console.WriteLine("Registreret: Standard Unix tidsstempel (sekunder)");
40 }
41 else
42 {
43 throw new ArgumentException("Ugyldigt tidsstempel format. Forventede 10, 13 eller 16 cifre.");
44 }
45
46 // Format-streng baseret på 12-timers eller 24-timers præference
47 string formatString = use12Hour
48 ? "dddd, MMMM d, yyyy h:mm:ss tt" // 12-timers format med AM/PM
49 : "dddd, MMMM d, yyyy HH:mm:ss"; // 24-timers format
50
51 // Returnér formateret dato-streng
52 return dateTime.ToString(formatString);
53 }
54
55 static void Main()
56 {
57 try
58 {
59 // Standard Unix tidsstempel (10 cifre)
60 Console.WriteLine(ConvertTimestamp("1609459200", false));
61
62 // Millisekund-præcision (13 cifre)
63 Console.WriteLine(ConvertTimestamp("1609459200000", false));
64
65 // Mikrosekund-præcision (16 cifre)
66 Console.WriteLine(ConvertTimestamp("1609459200000000", true));
67 }
68 catch (ArgumentException e)
69 {
70 Console.WriteLine(e.Message);
71 }
72 }
73}
74
Håndtering af Kanttilfælde
Når man arbejder med Unix-tidsstempler af forskellige præcisionsniveauer, er det vigtigt at håndtere kanttilfælde korrekt. Her er et eksempel, der demonstrerer omfattende håndtering af kanttilfælde:
1// JavaScript omfattende kanttilfælde håndtering for flere tidsstempel-formater
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Inputvalidering
4 if (timestamp === undefined || timestamp === null || timestamp === '') {
5 return "Fejl: Tomt eller udefineret tidsstempel";
6 }
7
8 // Sørg for at tidsstemplet er en streng for længdekontrol
9 const timestampStr = String(timestamp).trim();
10
11 // Tjek om tidsstemplet kun indeholder cifre
12 if (!/^\d+$/.test(timestampStr)) {
13 return "Fejl: Tidsstempel skal kun indeholde cifre";
14 }
15
16 // Registrer format baseret på længde
17 let date;
18 try {
19 if (timestampStr.length === 16) {
20 // Mikrosekund-præcision
21 const microseconds = Number(timestampStr);
22 date = new Date(microseconds / 1000); // Konverter til millisekunder
23 console.log("Behandler mikrosekund tidsstempel (16 cifre)");
24
25 // Tjek for ugyldig dato
26 if (isNaN(date.getTime())) {
27 return "Fejl: Ugyldigt mikrosekund tidsstempel";
28 }
29 } else if (timestampStr.length === 13) {
30 // Millisekund-præcision
31 const milliseconds = Number(timestampStr);
32 date = new Date(milliseconds);
33 console.log("Behandler millisekund tidsstempel (13 cifre)");
34
35 // Tjek for ugyldig dato
36 if (isNaN(date.getTime())) {
37 return "Fejl: Ugyldigt millisekund tidsstempel";
38 }
39 } else if (timestampStr.length === 10) {
40 // Standard Unix tidsstempel (sekunder)
41 const seconds = Number(timestampStr);
42 date = new Date(seconds * 1000);
43 console.log("Behandler standard tidsstempel (10 cifre)");
44
45 // Tjek for ugyldig dato
46 if (isNaN(date.getTime())) {
47 return "Fejl: Ugyldigt standard tidsstempel";
48 }
49
50 // Tjek for Y2K38 problem (for 32-bit systemer)
51 const maxInt32 = 2147483647; // Maksimal værdi for 32-bit signed integer
52 if (seconds > maxInt32) {
53 console.warn("Advarsel: Tidsstemplet overskrider 32-bit integer grænsen (Y2K38 problem)");
54 }
55 } else {
56 return "Fejl: Ugyldig tidsstempel længde. Forventede 10, 13 eller 16 cifre.";
57 }
58
59 // Formatér datoen
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 "Fejl ved konvertering af tidsstempel: " + error.message;
74 }
75}
76
77// Test med forskellige kanttilfælde
78console.log(safeConvertTimestamp("1609459200")); // Standard (10 cifre)
79console.log(safeConvertTimestamp("1609459200000")); // Millisekunder (13 cifre)
80console.log(safeConvertTimestamp("1609459200000000")); // Mikrosekunder (16 cifre)
81console.log(safeConvertTimestamp("abc123")); // Ikke-numerisk
82console.log(safeConvertTimestamp("12345")); // Ugyldig længde
83console.log(safeConvertTimestamp("9999999999999999")); // Meget stor mikrosekund tidsstempel
84console.log(safeConvertTimestamp("")); // Tom streng
85
Ofte Stillede Spørgsmål
Hvad er et Unix tidsstempel?
Et Unix tidsstempel er antallet af sekunder, der er gået siden 1. januar 1970 (midnat UTC/GMT), uden at tælle skudsekunder. Det giver en kompakt, sprog-uafhængig måde at repræsentere et specifikt øjeblik i tiden.
Hvordan fungerer den automatiske registrering af tidsstempel-format?
Konverteren registrerer automatisk tidsstempel formatet baseret på antallet af cifre:
- 10 cifre: Standard Unix tidsstempel (sekunder siden epoch)
- 13 cifre: Millisekund-præcision tidsstempel
- 16 cifre: Mikrosekund-præcision tidsstempel
Hvorfor har jeg brug for millisekund eller mikrosekund præcision?
Millisekund-præcision (13 cifre) er nyttig til applikationer, der kræver mere nøjagtig timing, såsom præstationsmonitorering, sporing af brugerinteraktion og visse finansielle applikationer. Mikrosekund-præcision (16 cifre) er nødvendig for højtydende computing, videnskabelige applikationer og højfrekvent handelssystemer, hvor ekstremt præcis timing er kritisk.
Kan jeg konvertere datoer før 1970 ved hjælp af Unix tidsstempler?
Ja, datoer før 1. januar 1970 repræsenteres ved hjælp af negative tidsstempler. Dog kan nogle systemer muligvis ikke håndtere negative tidsstempler korrekt, så det er vigtigt at teste denne funktionalitet, hvis du har brug for at arbejde med historiske datoer.
Hvad er År 2038 problemet?
År 2038 problemet opstår, fordi mange systemer gemmer Unix tidsstempler som 32-bit signed integers, som kun kan repræsentere datoer op til 19. januar 2038 (03:14:07 UTC). Efter dette tidspunkt vil heltallet overflyde, hvilket potentielt kan forårsage systemfejl. Moderne systemer bruger i stigende grad 64-bit integers for at undgå dette problem.
Hvordan håndterer jeg tidszone-konverteringer med Unix tidsstempler?
Unix tidsstempler er altid i UTC (Coordinated Universal Time). For at konvertere til en bestemt tidszone skal du anvende den passende offset efter at have konverteret tidsstemplet til en dato. De fleste programmeringssprog tilbyder indbyggede funktioner til at håndtere tidszone-konverteringer.
Hvad er forskellen mellem Unix tid og ISO 8601?
Unix tid er en numerisk repræsentation (sekunder siden epoch), mens ISO 8601 er et strengformat (f.eks. "2021-01-01T00:00:00Z"). Unix tid er mere kompakt og lettere at bruge til beregninger, mens ISO 8601 er mere menneskeligt læsbart og selvbeskrivende.
Hvor præcise er Unix tidsstempler?
Standard Unix tidsstempler har sekund-niveau præcision. For applikationer, der kræver større nøjagtighed, giver millisekund tidsstempler (13 cifre) 1/1000 sekund præcision, og mikrosekund tidsstempler (16 cifre) tilbyder 1/1.000.000 sekund præcision.
Tager Unix tidsstempler højde for skudsekunder?
Nej, Unix tid defineres som antallet af sekunder siden epoch, eksklusive skudsekunder. Dette betyder, at der under et skudsekund ikke vil blive talt op i Unix tidsstempel. Dette kan forårsage problemer i applikationer, der kræver præcis astronomisk tid.
Kan jeg bruge Unix tidsstempler til at planlægge fremtidige begivenheder?
Ja, Unix tidsstempler bruges bredt til planlægning. Men for meget fjerne fremtidige datoer skal man være opmærksom på potentielle begrænsninger som År 2038 problemet for 32-bit systemer og håndteringen af tidszoneændringer og overgange til sommertid.
Referencer
-
"Unix Time." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time
-
"År 2038 Problemet." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "The Complexities of Calendrical Time." 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: Date and Time on the Internet: Timestamps." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., and Dennis M. Ritchie. "The C Programming Language." Prentice Hall, 1988.
-
"Precision Timing in High-Performance Computing." ACM Computing Surveys, https://dl.acm.org/doi/10.1145/3232678
-
"Tidsrepræsentation i Finansielle Systemer." Journal of Financial Technology, https://www.fintech-journal.com/time-representation
Prøv vores tidsstempel konverter nu for nemt at konvertere Unix tidsstempler af enhver præcision til menneskeligt læsbare datoer. Uanset om du arbejder med standard Unix tidsstempler, millisekund præcision eller mikrosekund præcision, registrerer vores værktøj automatisk formatet og giver nøjagtige konverteringer.
Relaterede Værktøjer
Opdag flere værktøjer, der måske kan være nyttige for din arbejdsgang.