CommandDialog

Epoch轉換器

將Unix時間戳(自1970年1月1日以來的秒數)轉換為人類可讀的日期,以及反向轉換,簡化基於時間的計算和比較。

Unix時間戳
本地日期
RFC 3339
ISO 8601
ISO 9075
ISO 7231
UTC日期

什麼是Epoch或Unix時間戳?

Unix時間戳,也稱為Epoch時間或POSIX時間,是一種用於描述時間點的系統,表示自Unix紀元(1970年1月1日00:00:00 UTC)以來經過的秒數,不包括閏秒。它作為計算中時間表示的通用標準,能夠在系統和應用程式之間進行精確的時間計算、比較和同步。

Unix時間戳廣泛用於資料庫、日誌系統、API和分散式系統中,以追蹤事件、排程任務和管理時間敏感的操作。然而,由於Unix時間排除了閏秒,它並不是真正的UTC表示。許多遺留系統將Unix時間存儲為有符號的32位整數,這將在2038年1月19日03:14:08 UTC溢出,導致2038年問題。

2038年1月19日會發生什麼?

2038年問題(Y2038、Epochalypse或Unix Y2K)是使用有符號32位整數存儲Unix時間的系統面臨的一個關鍵問題。這些系統無法表示2038年1月19日03:14:07 UTC之後的時間,因為將超過最大值(2,147,483,647秒)。當時間戳遞增時,它將溢出,變為負數,導致系統將其誤解為1901年12月13日。

這種整數溢出可能會破壞金融交易、航空、醫療保健和基礎設施等關鍵系統,這些系統需要精確的時間記錄。為了緩解這一問題,現代系統正在過渡到64位整數,它可以表示未來數十億年的時間。開發人員也被鼓勵更新遺留系統,並採用健壯的時間處理庫,以防止與Y2038相關的故障。

如何在不同程式語言中取得當前的Epoch時間?

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())