Конвертор на Unix времеви печати в дати: Поддръжка на 12/24-часов формат
Конвертирайте Unix времеви печати в четими за човека дати и часове. Изберете между 12-часов и 24-часов формат с този прост, удобен за потребителя инструмент за конвертиране.
Конвертор на Unix времеви печат
Конвертирана дата и час
Документация
Конвертор на Unix времеви печати
Въведение
Unix времевата печат (известна още като POSIX време или Epoch време) е система за описание на точка във времето. Това е броят на секундите, които са изминали от 1 януари 1970 г. (полунощ UTC/GMT), без да се броят високосните секунди. Unix времевите печати се използват широко в компютърните системи и програмните езици, тъй като предоставят компактно, независимо от езика представяне на конкретен момент във времето.
Този конвертор ви позволява да преобразувате Unix времеви печат в четим за човека формат на дата и час. Той поддържа както 12-часов (AM/PM), така и 24-часов формат на времето, за да отговори на различни регионални и лични предпочитания.
Как работят Unix времевите печати
Unix времевите печати се изчисляват като броя на секундите от Unix Epoch (1 януари 1970 г., 00:00:00 UTC). Това ги прави особено полезни за изчисляване на времеви разлики и за съхраняване на дати в компактно форматирано представяне.
Математическото преобразуване от Unix времеви печат в календарна дата включва няколко стъпки:
- Започнете с Unix Epoch (1 януари 1970 г., 00:00:00 UTC)
- Добавете броя на секундите в времевия печат
- Вземете предвид високосните години, променливата дължина на месеците и другите календарни сложности
- Приложете корекции на часовата зона, ако е необходимо
Например, Unix времевият печат 1609459200
представлява петък, 1 януари 2021 г., 00:00:00 UTC.
Формулата за преобразуване може да бъде изразена като:
Повечето програмни езици и операционни системи предоставят вградени функции за обработка на това преобразуване, абстрахирайки сложните календарни изчисления.
Опции за форматиране на времето
Този конвертор предлага две опции за форматиране на времето:
-
24-часов формат (понякога наричан "военен час"): Часовете варират от 0 до 23, и няма обозначение AM/PM. Например, 15:00 е представено като 15:00.
-
12-часов формат: Часовете варират от 1 до 12, с AM (ante meridiem) за времето от полунощ до обяд, и PM (post meridiem) за времето от обяд до полунощ. Например, 15:00 в 24-часов формат е представено като 3:00 PM.
Изборът между тези формати е до голяма степен въпрос на регионална конвенция и лични предпочитания:
- 24-часовият формат се използва широко в повечето от Европа, Латинска Америка и Азия, както и в научни, военни и медицински контексти по целия свят.
- 12-часовият формат е разпространен в Съединените щати, Канада, Австралия и някои други англоговорящи страни за ежедневна употреба.
Гранични случаи и ограничения
Когато работите с Unix времеви печати, е важно да бъдете наясно с няколко гранични случая и ограничения:
-
Отрицателни времеви печати: Те представляват дати преди Unix Epoch (1 януари 1970 г.). Въпреки че математически са валидни, някои системи може да не обработват отрицателни времеви печати правилно.
-
Проблемът с годината 2038: Unix времевите печати често се съхраняват като 32-битови знакови цели числа, които ще прелетят на 19 януари 2038 г. След тази дата, 32-битовите системи няма да могат да представят времето правилно, освен ако не бъдат модифицирани да използват по-голям тип цяло число.
-
Изключително големи времеви печати: Много далечни бъдещи дати може да не могат да бъдат представени в някои системи или да бъдат обработвани непоследователно.
-
Високосни секунди: Unix времето не отчита високосните секунди, които понякога се добавят към UTC, за да компенсират неправилното въртене на Земята. Това означава, че Unix времето не е точно синхронизирано с астрономическото време.
-
Съображения за часовата зона: Unix времевите печати представляват моменти в UTC. Преобразуването в местно време изисква допълнителна информация за часовата зона.
-
Летне време: При преобразуването на времеви печати в местно време, трябва да се вземат предвид сложностите на преходите за летно време.
Приложения
Unix времевите печати се използват в множество приложения в областта на компютрите и управлението на данни:
-
Записи в бази данни: Времевите печати обикновено се използват за записване на времето, когато записи са създадени или модифицирани.
-
Уеб разработка: HTTP заглавия, бисквитки и механизми за кеширане често използват Unix времеви печати.
-
Лог файлове: Системните логове обикновено записват събития с Unix времеви печати за точно хронологично подреждане.
-
Системи за контрол на версиите: Git и други VCS използват времеви печати, за да записват кога са направени комитите.
-
API отговори: Много уеб API включват времеви печати в своите отговори, за да посочат кога данните са генерирани или кога ресурсите са били последно модифицирани.
-
Файлови системи: Времената на създаване и модификация на файлове често се съхраняват като Unix времеви печати.
-
Управление на сесии: Уеб приложенията използват времеви печати, за да определят кога потребителските сесии трябва да изтекат.
-
Анализ на данни: Времевите печати предоставят стандартизиран начин за работа с времеви данни в приложения за анализ.
Алтернативи
Въпреки че Unix времевите печати са широко използвани, съществуват алтернативни формати за представяне на времето, които могат да бъдат по-подходящи в определени контексти:
-
ISO 8601: Стандартизиран стринг формат (например "2021-01-01T00:00:00Z"), който е четим за човека, като същевременно запазва сортирането. Често е предпочитан за обмен на данни и потребителски приложения.
-
RFC 3339: Профил на ISO 8601, използван в интернет протоколите, с по-строги изисквания за форматиране.
-
Четими формати: Локализирани стрингове с дати (например "1 януари 2021 г.") са по-подходящи за директна взаимодействие с потребителя, но са по-малко подходящи за изчисления.
-
Microsoft FILETIME: 64-битова стойност, представляваща броя на интервалите от 100 наносекунди от 1 януари 1601 г., използвана в Windows системи.
-
Юлиански ден: Използван в астрономията и някои научни приложения, брои дните от 1 януари 4713 г. пр.н.е.
Изборът на формат за време зависи от фактори като:
- Необходима прецизност
- Нужди от четимост за хора
- Ограничения за съхранение
- Съвместимост с съществуващи системи
- Обхват на датите, които трябва да бъдат представени
История
Концепцията за Unix време произхожда от разработването на операционната система Unix в Bell Labs в края на 60-те и началото на 70-те години. Решението да се използва 1 януари 1970 г. като епоха беше до известна степен произволно, но практично за времето - то беше достатъчно близо, за да минимизира изискванията за съхранение на дати от интерес, но достатъчно далеч в миналото, за да бъде полезно за исторически данни.
Първоначалната реализация използва 32-битово знаково цяло число за съхраняване на броя на секундите, което беше адекватно за очакваната продължителност на живот на Unix системите по това време. Въпреки това, това решение доведе до Проблема с годината 2038 (понякога наричан "Y2K38" или "Unix милионният бъг"), тъй като 32-битовите знакови цели числа могат да представят само дати до 19 януари 2038 г. (03:14:07 UTC).
Когато Unix и Unix-подобните операционни системи станаха популярни, Unix времевият печат стана де факто стандарт за представяне на времето в компютрите. Той беше приет от множество програмни езици, бази данни и приложения, разширявайки се далеч извън оригиналната Unix среда.
Съвременните системи все по-често използват 64-битови цели числа за времевите печати, което разширява представителния обхват до приблизително 292 милиарда години в двете посоки от епохата, ефективно решавайки Проблема с годината 2038. Въпреки това, наследените системи и приложения все още могат да бъдат уязвими.
Простотата и полезността на Unix времевия печат гарантираха продължаващата му значимост, въпреки развитието на по-сложни формати за представяне на времето. Той остава основна концепция в компютрите, стояща в основата на много от нашата цифрова инфраструктура.
Примери за код
Ето примери за това как да конвертирате Unix времеви печати в четими за човека дати на различни програмни езици:
1// JavaScript конверсия на времеви печати
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3 // Създайте нов обект Date (JavaScript използва милисекунди)
4 const date = new Date(timestamp * 1000);
5
6 // Опции за форматиране
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 // Преобразувайте в стринг, използвайки локално форматиране
19 return date.toLocaleString(undefined, options);
20}
21
22// Пример за употреба
23const timestamp = 1609459200; // 1 януари 2021 г. 00:00:00 UTC
24console.log(convertUnixTimestamp(timestamp, false)); // 24-часов формат
25console.log(convertUnixTimestamp(timestamp, true)); // 12-часов формат
26
1# Python конверсия на времеви печати
2import datetime
3
4def convert_unix_timestamp(timestamp, use_12hour=False):
5 # Преобразувайте Unix времеви печат в обект datetime
6 date = datetime.datetime.fromtimestamp(timestamp)
7
8 # Форматирайте стринга с дата
9 if use_12hour:
10 format_string = "%A, %B %d, %Y %I:%M:%S %p" # 12-часов формат с AM/PM
11 else:
12 format_string = "%A, %B %d, %Y %H:%M:%S" # 24-часов формат
13
14 return date.strftime(format_string)
15
16# Пример за употреба
17timestamp = 1609459200 # 1 януари 2021 г. 00:00:00 UTC
18print(convert_unix_timestamp(timestamp, False)) # 24-часов формат
19print(convert_unix_timestamp(timestamp, True)) # 12-часов формат
20
1<?php
2// PHP конверсия на времеви печати
3function convertUnixTimestamp($timestamp, $use12Hour = false) {
4 // Формат на стринга
5 $formatString = $use12Hour
6 ? 'l, F j, Y g:i:s A' // 12-часов формат с AM/PM
7 : 'l, F j, Y H:i:s'; // 24-часов формат
8
9 // Преобразувайте и форматирайте датата
10 return date($formatString, $timestamp);
11}
12
13// Пример за употреба
14$timestamp = 1609459200; // 1 януари 2021 г. 00:00:00 UTC
15echo convertUnixTimestamp($timestamp, false) . "\n"; // 24-часов формат
16echo convertUnixTimestamp($timestamp, true) . "\n"; // 12-часов формат
17?>
18
1// Java конверсия на времеви печати
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 // Преобразувайте Unix времеви печат в Instant, след това в LocalDateTime
10 Instant instant = Instant.ofEpochSecond(timestamp);
11 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
12
13 // Създайте форматиращ обект на базата на желаното форматиране
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 // Форматирайте датата
19 return dateTime.format(formatter);
20 }
21
22 public static void main(String[] args) {
23 long timestamp = 1609459200; // 1 януари 2021 г. 00:00:00 UTC
24 System.out.println(convertUnixTimestamp(timestamp, false)); // 24-часов формат
25 System.out.println(convertUnixTimestamp(timestamp, true)); // 12-часов формат
26 }
27}
28
1// C# конверсия на времеви печати
2using System;
3
4class UnixTimestampConverter
5{
6 public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
7 {
8 // Преобразувайте Unix времеви печат в DateTime
9 // Unix времевият печат е секунди от 1970-01-01
10 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
11
12 // Формат на стринга на базата на 12-часов или 24-часов предпочитание
13 string formatString = use12Hour
14 ? "dddd, MMMM d, yyyy h:mm:ss tt" // 12-часов формат с AM/PM
15 : "dddd, MMMM d, yyyy HH:mm:ss"; // 24-часов формат
16
17 // Върнете форматирания стринг с дата
18 return dateTime.ToString(formatString);
19 }
20
21 static void Main()
22 {
23 long timestamp = 1609459200; // 1 януари 2021 г. 00:00:00 UTC
24 Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // 24-часов формат
25 Console.WriteLine(ConvertUnixTimestamp(timestamp, true)); // 12-часов формат
26 }
27}
28
1# Ruby конверсия на времеви печати
2require 'time'
3
4def convert_unix_timestamp(timestamp, use_12hour = false)
5 # Преобразувайте Unix времеви печат в обект Time
6 time = Time.at(timestamp)
7
8 # Формат на базата на 12-часов или 24-часов предпочитание
9 if use_12hour
10 time.strftime("%A, %B %d, %Y %I:%M:%S %p") # 12-часов формат с AM/PM
11 else
12 time.strftime("%A, %B %d, %Y %H:%M:%S") # 24-часов формат
13 end
14end
15
16# Пример за употреба
17timestamp = 1609459200 # 1 януари 2021 г. 00:00:00 UTC
18puts convert_unix_timestamp(timestamp, false) # 24-часов формат
19puts convert_unix_timestamp(timestamp, true) # 12-часов формат
20
1// Go конверсия на времеви печати
2package main
3
4import (
5 "fmt"
6 "time"
7)
8
9func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
10 // Преобразувайте Unix времеви печат в Time
11 t := time.Unix(timestamp, 0)
12
13 // Формат на стринга на базата на 12-часов или 24-часов предпочитание
14 formatString := "Monday, January 2, 2006 "
15 if use12Hour {
16 formatString += "3:04:05 PM" // 12-часов формат с AM/PM
17 } else {
18 formatString += "15:04:05" // 24-часов формат
19 }
20
21 // Върнете форматираното време
22 return t.Format(formatString)
23}
24
25func main() {
26 timestamp := int64(1609459200) // 1 януари 2021 г. 00:00:00 UTC
27 fmt.Println(convertUnixTimestamp(timestamp, false)) // 24-часов формат
28 fmt.Println(convertUnixTimestamp(timestamp, true)) // 12-часов формат
29}
30
1// Swift конверсия на времеви печати
2import Foundation
3
4func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
5 // Създайте Date от Unix времеви печат
6 let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
7
8 // Създайте DateFormatter
9 let formatter = DateFormatter()
10 formatter.dateStyle = .full
11
12 // Задайте стил на времето на базата на 12-часов или 24-часов предпочитание
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 // Върнете форматираната дата
23 return formatter.string(from: date)
24}
25
26// Пример за употреба
27let timestamp = 1609459200 // 1 януари 2021 г. 00:00:00 UTC
28print(convertUnixTimestamp(timestamp, use12Hour: false)) // 24-часов формат
29print(convertUnixTimestamp(timestamp, use12Hour: true)) // 12-часов формат
30
1# R конверсия на времеви печати
2convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
3 # Преобразувайте Unix времеви печат в POSIXct дата/час
4 date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
5
6 # Формат на базата на 12-часов или 24-часов предпочитание
7 if (use_12hour) {
8 format_string <- "%A, %B %d, %Y %I:%M:%S %p" # 12-часов формат с AM/PM
9 } else {
10 format_string <- "%A, %B %d, %Y %H:%M:%S" # 24-часов формат
11 }
12
13 # Върнете форматирания стринг с дата
14 format(date_time, format_string)
15}
16
17# Пример за употреба
18timestamp <- 1609459200 # 1 януари 2021 г. 00:00:00 UTC
19cat(convert_unix_timestamp(timestamp, FALSE), "\n") # 24-часов формат
20cat(convert_unix_timestamp(timestamp, TRUE), "\n") # 12-часов формат
21
1% MATLAB конверсия на времеви печати
2function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
3 % Преобразувайте Unix времеви печат в MATLAB datetime
4 % MATLAB датите са дни от 1900-01-01, с 1 = 1900-01-01
5 % Unix времевият печат е секунди от 1970-01-01
6
7 % Първо преобразувайте в Excel формат на дата
8 % 25569 е броят на дните между 1900-01-01 и 1970-01-01
9 excelDate = (timestamp / 86400) + 25569;
10
11 % Формат на базата на 12-часов или 24-часов предпочитание
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% Пример за употреба
20timestamp = 1609459200; % 1 януари 2021 г. 00:00:00 UTC
21disp(convertUnixTimestamp(timestamp, false)) % 24-часов формат
22disp(convertUnixTimestamp(timestamp, true)) % 12-часов формат
23
1' Excel VBA конверсия на времеви печати
2Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
3 ' Преобразувайте Unix времеви печат в Excel дата/час
4 ' Excel датите са дни от 1900-01-01, с 1 = 1900-01-01
5 ' Unix времевият печат е секунди от 1970-01-01
6
7 ' Първо преобразувайте в Excel формат на дата
8 ' 25569 е броят на дните между 1900-01-01 и 1970-01-01
9 Dim excelDate As Double
10 excelDate = (timestamp / 86400) + 25569
11
12 ' Формат на базата на 12-часов или 24-часов предпочитание
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' Употреба в работен лист:
21' =ConvertUnixTimestamp(1609459200, TRUE) ' 12-часов формат
22' =ConvertUnixTimestamp(1609459200, FALSE) ' 24-часов формат
23
Обработка на гранични случаи
Когато работите с Unix времеви печати, е важно да обработвате граничните случаи правилно. Ето примери за обработка на някои общи гранични случаи:
1// JavaScript обработка на гранични случаи
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // Проверете дали времевият печат е валиден
4 if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5 return "Невалиден времеви печат";
6 }
7
8 // Проверете за отрицателни времеви печати (дати преди 1970)
9 if (timestamp < 0) {
10 // Някои браузъри може да не обработват отрицателни времеви печати правилно
11 // Използвайте по-робустен подход за дати преди 1970
12 const date = new Date(timestamp * 1000);
13 if (isNaN(date.getTime())) {
14 return "Невалидна дата (преди 1970)";
15 }
16 }
17
18 // Проверете за проблема с Y2K38 (за 32-битови системи)
19 const maxInt32 = 2147483647; // Максималната стойност за 32-битово знаково цяло число
20 if (timestamp > maxInt32) {
21 // Помислете за използване на BigInt за много големи времеви печати в съвременен JavaScript
22 console.warn("Времевият печат надвишава лимита на 32-битово цяло число (проблемът Y2K38)");
23 }
24
25 // Продължете с нормалното преобразуване
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 "Грешка при преобразуването на времевия печат: " + error.message;
41 }
42}
43
Препратки
-
"Unix времe." Уикипедия, Фондация Уикимедия, https://en.wikipedia.org/wiki/Unix_time
-
"Проблемът с годината 2038." Уикипедия, Фондация Уикимедия, https://en.wikipedia.org/wiki/Year_2038_problem
-
Олсън, Артър Дейвид. "Сложностите на календарното време." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." Уикипедия, Фондация Уикимедия, https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: Дата и час в интернет: Времеви печати." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Керниган, Брайън У., и Денис М. Ричи. "Езикът за програмиране C." Прентис Хол, 1988.
Обратна връзка
Щракнете върху тост за обратна връзка, за да започнете да давате обратна връзка за този инструмент
Свързани инструменти
Открийте още инструменти, които могат да бъдат полезни за вашия работен процес