Konwerter znacznika czasu Unix na datę: Wsparcie dla formatu 12/24 godziny
Konwertuj znaczniki czasu Unix na daty i godziny w formacie czytelnym dla ludzi. Wybierz między formatem 12-godzinnym a 24-godzinnym za pomocą tego prostego, przyjaznego narzędzia konwertera.
Konwerter znacznika czasu Unix
Przekonwertowana data i czas
Dokumentacja
Konwerter znaczników czasu Unix
Wprowadzenie
Znacznik czasu Unix (znany również jako czas POSIX lub czas Epoki) to system opisywania punktu w czasie. Jest to liczba sekund, która upłynęła od 1 stycznia 1970 roku (północ UTC/GMT), nie licząc sekund przestępnych. Znaczniki czasu Unix są powszechnie używane w systemach komputerowych i językach programowania, ponieważ zapewniają kompaktową, niezależną od języka reprezentację konkretnego momentu w czasie.
Ten konwerter pozwala na przekształcenie znacznika czasu Unix na datę i czas w formacie czytelnym dla ludzi. Obsługuje zarówno format czasu 12-godzinny (AM/PM), jak i 24-godzinny, aby dostosować się do różnych regionalnych i osobistych preferencji.
Jak działają znaczniki czasu Unix
Znaczniki czasu Unix są obliczane jako liczba sekund od Epoki Unix (1 stycznia 1970 roku, 00:00:00 UTC). Czyni to je szczególnie użytecznymi do obliczania różnic czasowych i do przechowywania dat w kompaktowym formacie.
Matematyczna konwersja ze znacznika czasu Unix na datę kalendarzową obejmuje kilka kroków:
- Rozpocznij od Epoki Unix (1 stycznia 1970 roku, 00:00:00 UTC)
- Dodaj liczbę sekund w znaczniku czasu
- Uwzględnij lata przestępne, różne długości miesięcy i inne złożoności kalendarza
- Zastosuj korekty strefy czasowej, jeśli to konieczne
Na przykład znacznik czasu Unix 1609459200
reprezentuje piątek, 1 stycznia 2021 roku, 00:00:00 UTC.
Formuła konwersji może być wyrażona jako:
Większość języków programowania i systemów operacyjnych zapewnia wbudowane funkcje do obsługi tej konwersji, abstrahując złożone obliczenia kalendarzowe.
Opcje formatu czasu
Ten konwerter oferuje dwie opcje formatu czasu:
-
Format 24-godzinny (czasami nazywany "czasem wojskowym"): Godziny wahają się od 0 do 23, a oznaczenie AM/PM nie występuje. Na przykład, 15:00 w formacie 24-godzinnym to 3:00 PM.
-
Format 12-godzinny: Godziny wahają się od 1 do 12, z AM (ante meridiem) dla czasów od północy do południa i PM (post meridiem) dla czasów od południa do północy. Na przykład, 15:00 w formacie 24-godzinnym to 3:00 PM.
Wybór między tymi formatami jest w dużej mierze kwestią konwencji regionalnych i osobistych preferencji:
- Format 24-godzinny jest powszechnie używany w większości Europy, Ameryki Łacińskiej i Azji, a także w kontekstach naukowych, wojskowych i medycznych na całym świecie.
- Format 12-godzinny jest powszechny w Stanach Zjednoczonych, Kanadzie, Australii i niektórych innych krajach anglojęzycznych w codziennym użyciu.
Przypadki brzegowe i ograniczenia
Pracując ze znacznikami czasu Unix, ważne jest, aby być świadomym kilku przypadków brzegowych i ograniczeń:
-
Ujemne znaczniki czasu: Reprezentują daty przed Epoką Unix (1 stycznia 1970 roku). Chociaż matematycznie są poprawne, niektóre systemy mogą nie obsługiwać ujemnych znaczników czasu poprawnie.
-
Problem roku 2038: Znaczniki czasu Unix są często przechowywane jako 32-bitowe liczby całkowite ze znakiem, które przepełnią się 19 stycznia 2038 roku. Po tym punkcie systemy 32-bitowe nie będą w stanie poprawnie reprezentować czasów, chyba że zostaną zmodyfikowane do używania większego typu całkowitego.
-
Ekstremalnie duże znaczniki czasu: Bardzo odległe daty mogą być nieprzedstawialne w niektórych systemach lub mogą być obsługiwane niespójnie.
-
Sekundy przestępne: Czas Unix nie uwzględnia sekund przestępnych, które są czasami dodawane do UTC, aby skompensować nieregularny ruch Ziemi. Oznacza to, że czas Unix nie jest precyzyjnie zsynchronizowany z czasem astronomicznym.
-
Rozważania dotyczące stref czasowych: Znaczniki czasu Unix reprezentują momenty w UTC. Konwersja na czas lokalny wymaga dodatkowych informacji o strefie czasowej.
-
Czas letni: Przy konwersji znaczników czasu na czas lokalny należy uwzględnić złożoności związane z przejściami na czas letni.
Zastosowania
Znaczniki czasu Unix są używane w licznych aplikacjach w zakresie informatyki i zarządzania danymi:
-
Rekordy baz danych: Znaczniki czasu są powszechnie używane do rejestrowania, kiedy wpisy zostały utworzone lub zmodyfikowane.
-
Rozwój stron internetowych: Nagłówki HTTP, pliki cookie i mechanizmy pamięci podręcznej często używają znaczników czasu Unix.
-
Pliki dzienników: Dzienniki systemowe zazwyczaj rejestrują zdarzenia z znacznikami czasu Unix w celu precyzyjnego uporządkowania chronologicznego.
-
Systemy kontroli wersji: Git i inne systemy VCS używają znaczników czasu do rejestrowania, kiedy dokonano commitów.
-
Odpowiedzi API: Wiele interfejsów API zawiera znaczniki czasu w swoich odpowiedziach, aby wskazać, kiedy dane zostały wygenerowane lub kiedy zasoby zostały ostatnio zmodyfikowane.
-
Systemy plików: Czas utworzenia i modyfikacji plików jest często przechowywany jako znaczniki czasu Unix.
-
Zarządzanie sesjami: Aplikacje internetowe używają znaczników czasu do określenia, kiedy sesje użytkowników powinny wygasnąć.
-
Analiza danych: Znaczniki czasu zapewniają ustandaryzowany sposób pracy z danymi czasowymi w aplikacjach analitycznych.
Alternatywy
Chociaż znaczniki czasu Unix są powszechnie używane, istnieją alternatywne formaty reprezentacji czasu, które mogą być bardziej odpowiednie w niektórych kontekstach:
-
ISO 8601: Ustandaryzowany format ciągu (np. "2021-01-01T00:00:00Z"), który jest czytelny dla ludzi, jednocześnie zachowując możliwość sortowania. Często preferowany do wymiany danych i aplikacji skierowanych do użytkowników.
-
RFC 3339: Profil ISO 8601 używany w protokołach internetowych, z surowszymi wymaganiami dotyczącymi formatowania.
-
Formaty czytelne dla ludzi: Zlokalizowane ciągi dat (np. "1 stycznia 2021") są bardziej odpowiednie do bezpośredniej interakcji z użytkownikami, ale są mniej odpowiednie do obliczeń.
-
Microsoft FILETIME: 64-bitowa wartość reprezentująca liczbę interwałów 100-nanosekundowych od 1 stycznia 1601 roku, używana w systemach Windows.
-
Numer dnia juliańskiego: Używany w astronomii i niektórych zastosowaniach naukowych, liczący dni od 1 stycznia 4713 roku p.n.e.
Wybór formatu czasu zależy od takich czynników jak:
- Wymagana precyzja
- Potrzeby dotyczące czytelności dla ludzi
- Ograniczenia przechowywania
- Zgodność z istniejącymi systemami
- Zakres dat, które muszą być reprezentowane
Historia
Koncepcja czasu Unix powstała wraz z rozwojem systemu operacyjnego Unix w laboratoriach Bell w późnych latach 60. i wczesnych 70. XX wieku. Decyzja o użyciu 1 stycznia 1970 roku jako epoki była w pewnym sensie arbitralna, ale praktyczna w tamtym czasie — była wystarczająco bliska, aby zminimalizować wymagania dotyczące przechowywania dat istotnych, ale wystarczająco daleka w przeszłości, aby być użyteczną dla danych historycznych.
Oryginalna implementacja używała 32-bitowej liczby całkowitej ze znakiem do przechowywania liczby sekund, co było wystarczające dla oczekiwanej długości życia systemów Unix w tamtym czasie. Jednak ta decyzja doprowadziła do problemu roku 2038 (czasami nazywanego "Y2K38" lub "Unix Millennium Bug"), ponieważ 32-bitowe liczby całkowite ze znakiem mogą reprezentować tylko daty do 19 stycznia 2038 roku (03:14:07 UTC).
W miarę jak Unix i systemy podobne do Unixa zyskiwały na popularności, znacznik czasu Unix stał się de facto standardem reprezentacji czasu w informatyce. Został przyjęty przez liczne języki programowania, bazy danych i aplikacje, wykraczając daleko poza swoje pierwotne środowisko Unix.
Nowoczesne systemy coraz częściej używają 64-bitowych liczb całkowitych do znaczników czasu, co wydłuża reprezentowalny zakres do około 292 miliardów lat w obu kierunkach od epoki, skutecznie rozwiązując problem roku 2038. Jednak starsze systemy i aplikacje mogą nadal być narażone.
Prostota i użyteczność znacznika czasu Unix zapewniły jego ciągłą aktualność, pomimo rozwoju bardziej zaawansowanych formatów reprezentacji czasu. Pozostaje on fundamentalną koncepcją w informatyce, stanowiąc podstawę naszej cyfrowej infrastruktury.
Przykłady kodu
Oto przykłady konwersji znaczników czasu Unix na daty czytelne dla ludzi w różnych językach programowania:
1// Konwersja znaczników czasu w JavaScript
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3 // Utwórz nowy obiekt Date (JavaScript używa milisekund)
4 const date = new Date(timestamp * 1000);
5
6 // Opcje formatowania
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 // Konwertuj na ciąg za pomocą formatowania lokalnego
19 return date.toLocaleString(undefined, options);
20}
21
22// Przykład użycia
23const timestamp = 1609459200; // 1 stycznia 2021 00:00:00 UTC
24console.log(convertUnixTimestamp(timestamp, false)); // Format 24-godzinny
25console.log(convertUnixTimestamp(timestamp, true)); // Format 12-godzinny
26
1# Konwersja znaczników czasu w Pythonie
2import datetime
3
4def convert_unix_timestamp(timestamp, use_12hour=False):
5 # Konwertuj znacznik czasu Unix na obiekt datetime
6 date = datetime.datetime.fromtimestamp(timestamp)
7
8 # Format ciągu daty
9 if use_12hour:
10 format_string = "%A, %B %d, %Y %I:%M:%S %p" # Format 12-godzinny z AM/PM
11 else:
12 format_string = "%A, %B %d, %Y %H:%M:%S" # Format 24-godzinny
13
14 return date.strftime(format_string)
15
16# Przykład użycia
17timestamp = 1609459200 # 1 stycznia 2021 00:00:00 UTC
18print(convert_unix_timestamp(timestamp, False)) # Format 24-godzinny
19print(convert_unix_timestamp(timestamp, True)) # Format 12-godzinny
20
1<?php
2// Konwersja znaczników czasu w PHP
3function convertUnixTimestamp($timestamp, $use12Hour = false) {
4 // Format ciągu
5 $formatString = $use12Hour
6 ? 'l, F j, Y g:i:s A' // Format 12-godzinny z AM/PM
7 : 'l, F j, Y H:i:s'; // Format 24-godzinny
8
9 // Konwertuj i formatuj datę
10 return date($formatString, $timestamp);
11}
12
13// Przykład użycia
14$timestamp = 1609459200; // 1 stycznia 2021 00:00:00 UTC
15echo convertUnixTimestamp($timestamp, false) . "\n"; // Format 24-godzinny
16echo convertUnixTimestamp($timestamp, true) . "\n"; // Format 12-godzinny
17?>
18
1// Konwersja znaczników czasu w Javie
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 // Konwertuj znacznik czasu Unix na Instant, a następnie na LocalDateTime
10 Instant instant = Instant.ofEpochSecond(timestamp);
11 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
12
13 // Utwórz formatowanie na podstawie żądanego formatu
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 // Formatuj datę
19 return dateTime.format(formatter);
20 }
21
22 public static void main(String[] args) {
23 long timestamp = 1609459200; // 1 stycznia 2021 00:00:00 UTC
24 System.out.println(convertUnixTimestamp(timestamp, false)); // Format 24-godzinny
25 System.out.println(convertUnixTimestamp(timestamp, true)); // Format 12-godzinny
26 }
27}
28
1// Konwersja znaczników czasu w C#
2using System;
3
4class UnixTimestampConverter
5{
6 public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
7 {
8 // Konwertuj znacznik czasu Unix na DateTime
9 // Znaczniki czasu Unix to sekundy od 1970-01-01
10 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
11
12 // Format ciągu na podstawie preferencji 12-godzinnej lub 24-godzinnej
13 string formatString = use12Hour
14 ? "dddd, MMMM d, yyyy h:mm:ss tt" // Format 12-godzinny z AM/PM
15 : "dddd, MMMM d, yyyy HH:mm:ss"; // Format 24-godzinny
16
17 // Zwróć sformatowany ciąg daty
18 return dateTime.ToString(formatString);
19 }
20
21 static void Main()
22 {
23 long timestamp = 1609459200; // 1 stycznia 2021 00:00:00 UTC
24 Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // Format 24-godzinny
25 Console.WriteLine(ConvertUnixTimestamp(timestamp, true)); // Format 12-godzinny
26 }
27}
28
1# Konwersja znaczników czasu w Rubym
2require 'time'
3
4def convert_unix_timestamp(timestamp, use_12hour = false)
5 # Konwertuj znacznik czasu Unix na obiekt Time
6 time = Time.at(timestamp)
7
8 # Format na podstawie preferencji 12-godzinnej lub 24-godzinnej
9 if use_12hour
10 time.strftime("%A, %B %d, %Y %I:%M:%S %p") # Format 12-godzinny z AM/PM
11 else
12 time.strftime("%A, %B %d, %Y %H:%M:%S") # Format 24-godzinny
13 end
14end
15
16# Przykład użycia
17timestamp = 1609459200 # 1 stycznia 2021 00:00:00 UTC
18puts convert_unix_timestamp(timestamp, false) # Format 24-godzinny
19puts convert_unix_timestamp(timestamp, true) # Format 12-godzinny
20
1// Konwersja znaczników czasu w Go
2package main
3
4import (
5 "fmt"
6 "time"
7)
8
9func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
10 // Konwertuj znacznik czasu Unix na Time
11 t := time.Unix(timestamp, 0)
12
13 // Format ciągu na podstawie preferencji 12-godzinnej lub 24-godzinnej
14 formatString := "Monday, January 2, 2006 "
15 if use12Hour {
16 formatString += "3:04:05 PM" // Format 12-godzinny z AM/PM
17 } else {
18 formatString += "15:04:05" // Format 24-godzinny
19 }
20
21 // Zwróć sformatowany czas
22 return t.Format(formatString)
23}
24
25func main() {
26 timestamp := int64(1609459200) // 1 stycznia 2021 00:00:00 UTC
27 fmt.Println(convertUnixTimestamp(timestamp, false)) // Format 24-godzinny
28 fmt.Println(convertUnixTimestamp(timestamp, true)) // Format 12-godzinny
29}
30
1// Konwersja znaczników czasu w Swift
2import Foundation
3
4func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
5 // Utwórz Date z znacznika czasu Unix
6 let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
7
8 // Utwórz DateFormatter
9 let formatter = DateFormatter()
10 formatter.dateStyle = .full
11
12 // Ustaw styl czasu na podstawie preferencji 12-godzinnej lub 24-godzinnej
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 // Zwróć sformatowaną datę
23 return formatter.string(from: date)
24}
25
26// Przykład użycia
27let timestamp = 1609459200 // 1 stycznia 2021 00:00:00 UTC
28print(convertUnixTimestamp(timestamp, use12Hour: false)) // Format 24-godzinny
29print(convertUnixTimestamp(timestamp, use12Hour: true)) // Format 12-godzinny
30
1# Konwersja znaczników czasu w R
2convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
3 # Konwertuj znacznik czasu Unix na datetime POSIXct
4 date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
5
6 # Format na podstawie preferencji 12-godzinnej lub 24-godzinnej
7 if (use_12hour) {
8 format_string <- "%A, %B %d, %Y %I:%M:%S %p" # Format 12-godzinny z AM/PM
9 } else {
10 format_string <- "%A, %B %d, %Y %H:%M:%S" # Format 24-godzinny
11 }
12
13 # Zwróć sformatowany ciąg daty
14 format(date_time, format_string)
15}
16
17# Przykład użycia
18timestamp <- 1609459200 # 1 stycznia 2021 00:00:00 UTC
19cat(convert_unix_timestamp(timestamp, FALSE), "\n") # Format 24-godzinny
20cat(convert_unix_timestamp(timestamp, TRUE), "\n") # Format 12-godzinny
21
1% Konwersja znaczników czasu w MATLAB
2function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
3 % Konwertuj znacznik czasu Unix na datę/godzinę MATLAB
4 % Daty MATLAB to dni od 1900-01-01, z 1 = 1900-01-01
5 % Znaczniki czasu Unix to sekundy od 1970-01-01
6
7 % Najpierw konwertuj na format daty MATLAB
8 % 25569 to liczba dni między 1900-01-01 a 1970-01-01
9 excelDate = (timestamp / 86400) + 25569;
10
11 % Format na podstawie preferencji 12-godzinnej lub 24-godzinnej
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% Przykład użycia
20timestamp = 1609459200; % 1 stycznia 2021 00:00:00 UTC
21disp(convertUnixTimestamp(timestamp, false)) % Format 24-godzinny
22disp(convertUnixTimestamp(timestamp, true)) % Format 12-godzinny
23
1' Konwersja znaczników czasu w Excel VBA
2Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
3 ' Konwertuj znacznik czasu Unix na datę/czas w Excelu
4 ' Daty Excel to dni od 1900-01-01, z 1 = 1900-01-01
5 ' Znaczniki czasu Unix to sekundy od 1970-01-01
6
7 ' Najpierw konwertuj na format daty Excel
8 ' 25569 to liczba dni między 1900-01-01 a 1970-01-01
9 Dim excelDate As Double
10 excelDate = (timestamp / 86400) + 25569
11
12 ' Format ciągu na podstawie preferencji 12-godzinnej lub 24-godzinnej
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' Użycie w arkuszu kalkulacyjnym:
21' =ConvertUnixTimestamp(1609459200, TRUE) ' Format 12-godzinny
22' =ConvertUnixTimestamp(1609459200, FALSE) ' Format 24-godzinny
23
Obsługa przypadków brzegowych
Pracując ze znacznikami czasu Unix, ważne jest, aby poprawnie obsługiwać przypadki brzegowe. Oto przykłady obsługi niektórych powszechnych przypadków brzegowych:
1// Obsługa przypadków brzegowych w JavaScript
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Sprawdź, czy znacznik czasu jest ważny
4 if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5 return "Nieprawidłowy znacznik czasu";
6 }
7
8 // Sprawdź ujemne znaczniki czasu (daty przed 1970)
9 if (timestamp < 0) {
10 // Niektóre przeglądarki mogą nie obsługiwać ujemnych znaczników czasu poprawnie
11 // Użyj bardziej solidnego podejścia dla dat przed 1970
12 const date = new Date(timestamp * 1000);
13 if (isNaN(date.getTime())) {
14 return "Nieprawidłowa data (przed 1970)";
15 }
16 }
17
18 // Sprawdź problem Y2K38 (dla systemów 32-bitowych)
19 const maxInt32 = 2147483647; // Maksymalna wartość dla 32-bitowej liczby całkowitej ze znakiem
20 if (timestamp > maxInt32) {
21 // Rozważ użycie BigInt dla bardzo dużych znaczników czasu w nowoczesnym JavaScript
22 console.warn("Znacznik czasu przekracza limit 32-bitowej liczby całkowitej (problem Y2K38)");
23 }
24
25 // Kontynuuj normalną konwersję
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 "Błąd konwersji znacznika czasu: " + error.message;
41 }
42}
43
Źródła
-
"Czas Unix." Wikipedia, Fundacja Wikimedia, https://pl.wikipedia.org/wiki/Czas_Unix
-
"Problem roku 2038." Wikipedia, Fundacja Wikimedia, https://pl.wikipedia.org/wiki/Problem_roku_2038
-
Olson, Arthur David. "Złożoności czasów kalendarzowych." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." Wikipedia, Fundacja Wikimedia, https://pl.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: Data i czas w Internecie: Znaczniki czasowe." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., i Dennis M. Ritchie. "Język programowania C." Prentice Hall, 1988.
Opinie
Kliknij powiadomienie o opinii, aby rozpocząć przesyłanie opinii o tym narzędziu
Powiązane narzędzia
Odkryj więcej narzędzi, które mogą być przydatne w Twoim przepływie pracy