Конвертер Unix Timestamp у Дату: Підтримка Форматів 12/24 Години
Конвертуйте Unix timestamps у зрозумілі дати та час. Обирайте між 12-годинним та 24-годинним форматами часу за допомогою цього простого, зручного інструменту конвертації.
Конвертер Unix Timestamp
Перетворена дата та час
Документація
Конвертер Unix-часів
Вступ
Unix-час (також відомий як POSIX-час або час Епохи) — це система для опису моменту часу. Це кількість секунд, що пройшли з 1 січня 1970 року (опівночі UTC/GMT), без урахування високосних секунд. Unix-часи широко використовуються в комп'ютерних системах і мовах програмування, оскільки вони забезпечують компактне, незалежне від мови представлення конкретного моменту часу.
Цей конвертер дозволяє вам перетворити Unix-час у зрозумілий для людини формат дати та часу. Він підтримує як 12-годинний (AM/PM), так і 24-годинний формати часу, щоб задовольнити різні регіональні та особисті уподобання.
Як працюють Unix-часи
Unix-часи обчислюються як кількість секунд з моменту Unix-Епохи (1 січня 1970 року, 00:00:00 UTC). Це робить їх особливо корисними для обчислення різниць у часі та для зберігання дат у компактному форматі.
Математичне перетворення з Unix-часу на календарну дату включає кілька етапів:
- Розпочніть з Unix-Епохи (1 січня 1970 року, 00:00:00 UTC)
- Додайте кількість секунд у часовій мітці
- Врахуйте високосні роки, різну довжину місяців та інші календарні складнощі
- Застосуйте коригування за часовим поясом, якщо потрібно
Наприклад, Unix-час 1609459200
представляє п'ятницю, 1 січня 2021 року, 00:00:00 UTC.
Формулу перетворення можна виразити так:
Більшість мов програмування та операційних систем надають вбудовані функції для обробки цього перетворення, абстрагуючи складні календарні обчислення.
Варіанти формату часу
Цей конвертер пропонує два варіанти формату часу:
-
24-годинний формат (іноді називається "військовим часом"): години варіюються від 0 до 23, і немає позначення AM/PM. Наприклад, 15:00 представляє 3:00 PM.
-
12-годинний формат: години варіюються від 1 до 12, з AM (ante meridiem) для часу з півночі до полудня, і PM (post meridiem) для часу з полудня до півночі. Наприклад, 15:00 у 24-годинному форматі представляє 3:00 PM.
Вибір між цими форматами в основному є питанням регіональної традиції та особистих уподобань:
- 24-годинний формат зазвичай використовується в більшості країн Європи, Латинської Америки та Азії, а також у наукових, військових і медичних контекстах по всьому світу.
- 12-годинний формат поширений у США, Канаді, Австралії та деяких інших англомовних країнах для повсякденного використання.
Країни та обмеження
При роботі з Unix-часами важливо бути обізнаним про кілька країн і обмежень:
-
Негативні часові мітки: вони представляють дати до Unix-Епохи (1 січня 1970 року). Хоча математично це дійсно, деякі системи можуть неправильно обробляти негативні часові мітки.
-
Проблема року 2038: Unix-часи часто зберігаються як 32-бітні знакові цілі числа, які переповняться 19 січня 2038 року. Після цього моменту системи з 32 бітами не зможуть правильно представляти час, якщо не будуть модифіковані для використання більшого типу цілого числа.
-
Надзвичайно великі часові мітки: дуже віддалені майбутні дати можуть бути непредставленими в деяких системах або можуть оброблятися непослідовно.
-
Високосні секунди: Unix-час не враховує високосні секунди, які час від часу додаються до UTC, щоб компенсувати нерегулярний оберт Землі. Це означає, що Unix-час не точно синхронізований з астрономічним часом.
-
Урахування часового поясу: Unix-часи представляють моменти в UTC. Перетворення на місцевий час вимагає додаткової інформації про часовий пояс.
-
Літній час: при конвертації часових міток у місцевий час необхідно враховувати складнощі переходів на літній час.
Варіанти використання
Unix-часи використовуються в численних застосунках у комп'ютерних та управлінських даних:
-
Записи в базі даних: часові мітки зазвичай використовуються для запису моментів створення або зміни записів.
-
Веб-розробка: заголовки HTTP, куки та механізми кешування часто використовують Unix-часи.
-
Лог-файли: системні журнали зазвичай записують події з Unix-часами для точного хронологічного порядку.
-
Системи контролю версій: Git та інші системи контролю версій використовують часові мітки для запису моментів комітів.
-
Відповіді 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 в кінці 1960-х і на початку 1970-х років. Рішення використовувати 1 січня 1970 року як епоху було дещо арбітрарним, але практичним для того часу — воно було достатньо близьким, щоб мінімізувати вимоги до зберігання для дат, що цікавлять, але достатньо далеким у минулому, щоб бути корисним для історичних даних.
Оригінальна реалізація використовувала 32-бітне знакове ціле число для зберігання кількості секунд, що було достатнім для очікуваного терміну служби Unix-систем у той час. Однак це рішення призвело до проблеми року 2038 (іноді називається "Y2K38" або "Unix Millennium Bug"), оскільки 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 datetime
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
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 Time." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time
-
"Проблема року 2038." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "Складнощі календарного часу." 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: Дата та час в Інтернеті: часові мітки." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., and Dennis M. Ritchie. "Мова програмування C." Prentice Hall, 1988.
Пов'язані Інструменти
Відкрийте більше інструментів, які можуть бути корисними для вашого робочого процесу