Chuyển đổi Epoch

Unix Epoch hiện tại

Một dòng nhật ký hiển thị giá trị 1729523412; một API trả về giá trị 1729523412000; và cơ sở dữ liệu ghi giá trị 1729523412.845293. Cả ba giá trị này đều biểu diễn cùng một thời điểm kể từ ngày 1 tháng 1 năm 1970 theo chuẩn UTC: giá trị đầu tính bằng giây, giá trị thứ hai tính bằng mili giây và giá trị thứ ba tính bằng giây kèm phần thập phân. Bộ chuyển đổi này hoạt động hai chiều: dán một dấu thời gian để đọc ngày giờ UTC, hoặc nhập một ngày để lấy giá trị epoch theo giây hoặc mili giây.

Cách chuyển đổi dấu thời gian của một epoch

  1. 1

    Dán dấu thời gian

    Một giá trị tính bằng giây (10 chữ số), mili giây (13 chữ số) hoặc có phần thập phân, như 1729523412.845293.

  2. 2

    Chọn độ chính xác

    Công tắc phía trên ô nhập chọn giây hoặc mili giây. Kết quả ngày giữ nguyên các phần của giây xuống đến micro giây.

  3. 3

    Đọc ngày UTC

    Giá trị đã chuyển đổi hiển thị theo chuẩn UTC với định dạng YYYY-MM-DD HH:MM:SS.micro giây, sẵn sàng để sao chép.

  4. 4

    Chuyển đổi ngược

    Nhập một ngày và giờ theo chuẩn UTC để lấy giá trị epoch theo giây hoặc mili giây.

“Thời kỳ” là gì?

Thời gian trong hệ thống Unix được tính bằng các giây (hoặc các phần số của giây) kể từ ngày 1 tháng 1 năm 1970 lúc 00:00:00 UTC, được gọi là kỷ nguyên Unix. Đây là định dạng dấu thời gian chủ đạo có thể đọc được bởi máy tính trong phần mềm.

  • Hệ thống POSIX: time() trả về số giây kể từ thời điểm khởi đầu (epoch).
  • JavaScript: Hàm Date.now() trả về giá trị tính bằng mili giây.
  • Java: Hàm System.currentTimeMillis() trả về giá trị tính bằng mili giây.
  • Go: time.Now().Unix() trả về giá trị bằng giây; UnixNano() trả về giá trị bằng nano giây.

Độ chính xác theo độ lớn

Số chữ số Độ chính xác Ví dụ
10 giây 1.729.523.412
13 mili giây 1.729.523.412.000
16 micro giây 1.729.523.412.000.000
19 nano giây 1.729.523.412.000.000.000

Bộ chuyển đổi này chấp nhận giây, mili giây và các giá trị có phần thập phân; hãy đặt công tắc độ chính xác phù hợp với dữ liệu nhập vào.

Thời điểm ghi nhận quan trọng

  • 0 – Ngày 1 tháng 1 năm 1970, lúc 00:00:00 UTC; chính là thời điểm khởi đầu của chu kỳ lịch sử này.
  • 1.000.000.000 – Ngày 9 tháng 9 năm 2001, lúc 01:46:40 UTC. Một khoảnh khắc phổ biến trong các sự kiện kỷ niệm “giây thứ tỷ”.
  • 1.234.567.890 – Ngày 13 tháng 2 năm 2009, lúc 23:31:30 UTC.
  • 2.147.483.647 – Ngày 19 tháng 1 năm 2038, lúc 03:14:07 UTC. Vấn đề Y2K38: hiện tượng tràn bộ nhớ 32 bit có dấu.
  • 10.000.000.000 – Tương lai xa: ngày 20 tháng 11 năm 2286, lúc 17:46:40 UTC.

Vấn đề Y2K38

Các hệ thống lưu thời gian Unix dưới dạng số nguyên 32 bit có dấu sẽ tràn số tại 2.147.483.647 giây (ngày 19 tháng 1 năm 2038). Các hệ thống hiện đại sử dụng số nguyên 64 bit, giúp đẩy vấn đề này ra xa hơn cả thời điểm “chết nhiệt” của Mặt Trời. Các hệ thống nhúng cũ và cơ sở dữ liệu cũ vẫn có thể bị ảnh hưởng; hãy kiểm tra ngăn xếp công nghệ của bạn.

Những chi tiết tinh tế về múi giờ

Thời gian epoch về bản chất là UTC. Khi chuyển đổi để hiển thị, bạn cần áp dụng một múi giờ.

  • Tên IANA (America/Los_Angeles, Europe/Berlin): tự động xử lý giờ tiết kiệm ánh sáng ban ngày.
  • Độ lệch (-08:00, +05:30): độ lệch cố định; không nhận biết DST.
  • Viết tắt (PST, CEST): không rõ ràng; các khu vực khác nhau dùng cùng một cách viết tắt. Không nên dùng để lưu trữ.

Các quy tắc DST thay đổi theo thời gian. Một dấu thời gian lịch sử trong America/New_York sử dụng các quy tắc DST đang có hiệu lực vào ngày đó, chứ không phải các quy tắc hiện hành. Bộ chuyển đổi này luôn hiển thị giờ UTC. Để xem thời điểm đó theo khu vực của bạn, hãy diễn giải kết quả UTC bằng tên IANA hoặc độ lệch cố định.

ISO 8601 so với RFC 2822

Về các dấu thời gian trong định dạng dữ liệu:

  • ISO 8601 (2024-10-21T14:30:12Z): tiêu chuẩn hiện đại được ưu tiên sử dụng, có thể sắp xếp và không gây nhầm lẫn.
  • RFC 2822 (Mon, 21 Oct 2024 14:30:12 +0000): được sử dụng trong các tiêu đề HTTP và email.

Đối với người dùng: định dạng cục bộ theo quy ước ngôn ngữ địa phương của họ.

Làm việc với giây nhuận

Thời gian POSIX không đếm giây nhuận; khi một giây nhuận được chèn vào, hệ thống lặng lẽ lùi lại một giây. Trong khi đó, TAI (Giờ Nguyên tử Quốc tế) lại đếm chúng. Đối với hầu hết mã ứng dụng, POSIX là lựa chọn đúng; tuy nhiên, trong thiên văn học, trắc địa và đo thời gian độ chính xác cao, nên dùng TAI hoặc UTC có nhận biết giây nhuận.

Câu hỏi thường gặp

Hãy kiểm tra công tắc độ chính xác: giá trị tính bằng mili giây (13 chữ số) được đọc thành giây sẽ cho một ngày rất xa trong tương lai. Công cụ luôn hiển thị giờ UTC; hãy so sánh kết quả với độ lệch giờ địa phương của bạn trước khi chuyển đổi.

Đúng vậy. Công cụ này chấp nhận các thời điểm âm, tức là các ngày trước thời kỳ Unix. Ví dụ, ngày 31 tháng 12 năm 1969 lúc 23:59:59 UTC tương ứng với giá trị -1.

Lưu epoch (UTC) và tên múi giờ IANA trong các trường riêng biệt. Định dạng ISO 8601 kèm độ lệch (ví dụ: 2024-10-21T14:30-07:00) giữ lại độ lệch này nhưng mất khả năng diễn giải lại khi quy tắc DST thay đổi. Hãy dùng tên IANA để lưu trữ chuẩn tắc.

Không. Giá trị chỉ được gửi đến máy chủ để thực hiện việc chuyển đổi và không được lưu trữ hay ghi nhật ký. Công cụ ghi một số đếm ẩn danh các lần chuyển đổi, không kèm giá trị.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác