Конвертер 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.
Відгуки
Натисніть на тост відгуку, щоб почати залишати відгук про цей інструмент
Супутні інструменти
Відкрийте для себе більше інструментів, які можуть бути корисними для вашого робочого процесу