Что такое эпохальное время или Unix - временная метка?
Unix - временная метка, также известная как эпохальное время или POSIX - время, представляет собой систему описания момента времени в виде количества секунд, прошедших с момента Unix - эпохи (00:00:00 UTC 1 января 1970 года), исключая високосные секунды. Это универсальный стандарт представления времени в вычислительной технике, позволяющий проводить точные вычисления, сравнения и синхронизацию, основанные на времени, между различными системами и приложениями.
Unix - временные метки широко используются в базах данных, системах логирования, API и распределенных системах для отслеживания событий, планирования задач и управления операциями, чувствительными к времени. Однако Unix - время не является точным представлением UTC из - за исключения високосных секунд. Многие устаревшие системы хранят Unix - время в виде знакового 32 - битного целого числа, которое переполнится 19 января 2038 года в 03:14:08 UTC, что приведет к проблемы 2038 года.
Что произойдет 19 января 2038 года?
Проблема 2038 года (Y2038, Epochalypse или Unix Y2K) представляет собой важную проблему для систем, которые используют знаковое 32 - битное целое число для хранения Unix - времени. Эти системы не могут представить времена, наступающие после 03:14:07 UTC 19 января 2038 года, так как будет превышен максимальное значение (2 147 483 647 секунд). При инкременте временная метка переполнится, станет отрицательным числом, и системы ошибочно интерпретируют его как 13 декабря 1901 года.
Это переполнение целого числа может привести к сбоям важных систем в таких областях, как финансовые транзакции, авиация, здравоохранение и инфраструктура, где точное отслеживание времени имеет решающее значение. Чтобы смягчить последствия этой проблемы, современные системы переходят к 64 - битным целым числам, которые могут представлять время в течение миллиардов лет в будущем. Также разработчикам рекомендуется обновлять устаревшие системы и использовать надежные библиотеки для обработки времени, чтобы предотвратить сбои, связанные с Y2038.
Как получить текущее эпохальное время в различных языках программирования?
PHP
$epoch = time();
Javascript
var epoch = Math.floor(Date.now() / 1000);
Typescript
let epoch: number = Math.floor(Date.now() / 1000);
C++
#include <chrono>
auto epoch = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();
Java
long epoch = System.currentTimeMillis() / 1000;
Rust
use std::time::{SystemTime, UNIX_EPOCH};
let epoch = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs();
Go
import "time"
epoch := time.Now().Unix()
Swift
import Foundation
let epoch = Int(Date().timeIntervalSince1970)
Bash Shell
epoch=$(date +%s)
C#
long epoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
MySQL
SELECT UNIX_TIMESTAMP(NOW());
MATLAB
epoch = posixtime(datetime('now'));
VBA
Dim epoch As Long
epoch = DateDiff("s", "1/1/1970", Now())