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 komunikat informujący, aby rozpocząć udzielanie opinii na temat tego narzędzia.
Powiązane narzędzia
Odkryj więcej narzędzi, które mogą być przydatne dla Twojego przepływu pracy