🕐

Câu hỏi thường gặp Bộ chuyển đổi timestamp Linux

Q: Unix timestamp là gì?

A: Unix timestamp (còn được gọi là POSIX time hoặc epoch time) là số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970, 00:00:00 UTC, không tính giây nhuận. Đây là một số nguyên đơn giản biểu thị cùng một thời điểm trên toàn cầu, bất kể múi giờ.

Q: Làm thế nào để chuyển đổi Unix timestamp sang ngày giờ dễ đọc?

A: Bạn có thể chuyển đổi Unix timestamp bằng nhiều cách:

  • Trực tuyến: Sử dụng Unix Timestamp Converter của chúng tôi để chuyển đổi tức thì
  • Linux terminal: Chạy date -d @1785292800 (trên GNU Linux) hoặc date -r 1785292800 (trên macOS)
  • JavaScript: new Date(timestamp * 1000).toISOString()
  • Python: datetime.utcfromtimestamp(1785292800)
  • PHP: date("Y-m-d H:i:s", 1785292800)

Q: Sự khác biệt giữa timestamp tính bằng giây và tính bằng mili giây là gì?

A: Timestamp tính bằng giây có độ dài 10 chữ số (ví dụ: 1785292800). Timestamp tính bằng mili giây có độ dài 13 chữ số (ví dụ: 1785292800000) vì nó nhân giá trị giây với 1000. Date.now() của JavaScript trả về mili giây, trong khi hầu hết các hệ thống và API khác sử dụng giây. Việc vô tình trộn lẫn hai loại này sẽ tạo ra ngày tháng sai lệch nghiêm trọng — sử dụng mili giây ở nơi yêu cầu giây sẽ cho ra ngày tháng cách xa khoảng 56.000 năm trong tương lai.

Luôn kiểm tra độ phân giải của nguồn dữ liệu trước khi chuyển đổi. Khi không chắc chắn, hãy đếm số chữ số: 10 chữ số = giây, 13 chữ số = mili giây.

Q: Unix timestamp có thể biểu thị ngày trước năm 1970 không?

A: Có. Các ngày trước ngày 1 tháng 1 năm 1970 được biểu thị bằng số âm. Ví dụ: timestamp -3600 tương ứng với ngày 31 tháng 12 năm 1969, 23:00:00 UTC. Không phải tất cả các công cụ chuyển đổi đều xử lý đúng timestamp âm, nhưng công cụ chuyển đổi trực tuyến của chúng tôi thì có. Các ngôn ngữ lập trình đều hỗ trợ phổ biến.

Q: Sự cố Year 2038 là gì?

A: Sự cố Year 2038 (còn được gọi là Y2K38) là vấn đề biểu diễn thời gian ảnh hưởng đến các hệ thống lưu trữ timestamp dưới dạng số nguyên có dấu 32-bit. Giá trị tối đa là 2147483647, tương ứng với ngày 19 tháng 1 năm 2038, lúc 03:14:07 UTC. Một giây sau đó, giá trị bị tràn thành -2147483648, được hiểu là ngày 13 tháng 12 năm 1901.

Hầu hết các hệ thống 64-bit hiện đại không bị ảnh hưởng, nhưng các thiết bị nhúng, cơ sở dữ liệu cũ và một số hệ thống 32-bit vẫn dễ bị tổn thương. Cách khắc phục là chuyển sang biểu diễn thời gian 64-bit, cung cấp phạm vi khoảng 292 tỷ năm.

Q: Unix timestamp có tính đến giây nhuận không?

A: Không. Unix timestamp cố ý bỏ qua giây nhuận. Mỗi ngày được coi là chính xác 86.400 giây, ngay cả khi một giây nhuận được thêm vào UTC. Trong quá trình chèn giây nhuận, Unix timestamp không tăng trong một giây, về cơ bản bỏ qua giây nhuận đó. Điều này có nghĩa là Unix timestamp lệch khỏi thời gian nguyên tử một lượng nhỏ (hiện tại khoảng 27 giây) nhưng đang tích lũy dần.

Q: Làm thế nào để xử lý múi giờ khi chuyển đổi Unix timestamp?

A: Unix timestamp biểu thị cùng một thời điểm ở mọi nơi. Múi giờ chỉ quan trọng khi bạn hiển thị nó dưới dạng ngày giờ dễ đọc. Luôn lưu trữ timestamp ở dạng số nguyên thô và chỉ chuyển đổi sang giờ địa phương khi hiển thị. Sử dụng tên múi giờ IANA như America/New_York thay vì các chữ viết tắt như EST hoặc PST, vì các chữ viết tắt không tính đến giờ tiết kiệm ánh sáng ban ngày. Unix Timestamp Converter của chúng tôi hiển thị kết quả trên nhiều múi giờ cùng lúc.

Q: Unix timestamp tối đa là bao nhiêu?

A: Giá trị tối đa phụ thuộc vào kích thước số nguyên được sử dụng để lưu trữ:

  • Số nguyên có dấu 32-bit: 2147483647 (ngày 19 tháng 1 năm 2038, 03:14:07 UTC)
  • Số nguyên không dấu 32-bit: 4294967295 (ngày 7 tháng 2 năm 2106, 06:28:15 UTC)
  • Số nguyên có dấu 64-bit: 9223372036854775807 (khoảng 292 tỷ năm kể từ bây giờ)

Hầu hết các hệ thống hiện đại sử dụng số nguyên 64-bit, cung cấp phạm vi gần như vô hạn. Cách làm phổ biến là lưu trữ timestamp trong các cột cơ sở dữ liệu hoặc cấu trúc dữ liệu dưới dạng kiểu 64-bit (BIGINT trong SQL), điều này an toàn cho tương lai lâu dài.

FAQ Bộ chuyển đổi timestamp Linux - CoolTool