Lập Trình

Trình Chuyển Đổi Dấu Thời Gian Unix

Thu hẹp khoảng cách giữa thời gian epoch và ngày tháng dễ đọc. Chuyển đổi bất kỳ dấu thời gian Unix nào thành ngày dễ đọc, hoặc ngược lại — cộng với hiển thị dấu thời gian hiện tại trực tiếp chỉ với một cú nhấp.

Công cụ này có hữu ích với bạn không?

Trình Chuyển Đổi Dấu Thời Gian Unix là gì?

Trình chuyển đổi Unix Timestamp là một công cụ phát triển thiết yếu kết nối thời gian epoch có thể đọc được bởi máy tính với các ngày tháng có thể đọc được bởi con người. Thời gian Unix (còn gọi là thời gian epoch) đo số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970 lúc 00:00:00 UTC — khoảnh khắc khi hệ điều hành Unix khởi động lần đầu tiên trên máy tính PDP-11 tại Bell Labs. Ngày này được gọi là Unix Epoch và đóng vai trò là điểm xuất phát phổ quát cho việc đo thời gian trong điện toán. Trình chuyển đổi hoạt động theo hai chiều: nhập timestamp Unix (thường là số 10 chữ số cho giây hoặc 13 chữ số cho mili giây) để xem ngày tháng tương ứng, hoặc nhập ngày giờ để lấy timestamp Unix tương đương. Hiển thị timestamp hiện tại thời gian thực được cập nhật mỗi giây để bạn có thể nắm bắt khoảnh khắc chính xác chỉ bằng một cú nhấp chuột. Date.now() của JavaScript và hầu hết các API hiện đại trả về timestamp bằng mili giây (13 chữ số), trong khi cơ sở dữ liệu và hệ thống legacy thường sử dụng giây (10 chữ số) — nhầm lẫn giữa hai cái là một trong những lỗi phổ biến nhất trong phát triển web. Trình chuyển đổi cũng xử lý timestamp âm đại diện cho ngày trước epoch (ngày 31 tháng 12 năm 1969 và trước đó). Chuyển đổi giữa UTC và giờ địa phương để xác minh các giá trị nhạy cảm với múi giờ.

Khi Nào Nên Sử Dụng Máy Tính Này

  • Bạn đang gỡ lỗi API trả về dấu thời gian Unix và cần đọc chúng dưới dạng ngày tháng
  • Bạn đang viết mã lưu trữ hoặc so sánh ngày và cần chuyển đổi giữa dấu thời gian và định dạng ngày
  • Bạn cần dấu thời gian Unix hiện tại cho mục nhật ký, gọi API hoặc bản ghi cơ sở dữ liệu
  • Bạn đang phân tích nhật ký máy chủ nơi dấu thời gian ở định dạng epoch
  • Bạn muốn xác minh rằng dấu thời gian trong mã của bạn tương ứng với ngày và giờ chính xác
  • Bạn đang làm việc với cơ sở dữ liệu hoặc hệ thống tệp sử dụng dấu thời gian Unix cho siêu dữ liệu tệp

Các bước:

  1. Nhập dấu thời gian Unix để chuyển đổi thành ngày dễ đọc.
  2. Hoặc nhập ngày/giờ để chuyển đổi thành dấu thời gian Unix.
  3. Nhấp vào nút giờ hiện tại để nhận dấu thời gian Unix hiện tại.
  4. Sao chép kết quả bằng nút sao chép.

Công Thức

Dấu thời gian → Ngày: new Date(timestamp × 1000) Ngày → Dấu thời gian: Math.floor(date.getTime() / 1000) Kỷ nguyên Unix: 1 tháng 1 năm 1970 00:00:00 UTC Dấu thời gian 32-bit tối đa: 19 tháng 1 năm 2038 (03:14:07 UTC)

Trường Hợp Sử Dụng

  • Gỡ lỗi phản hồi API có dấu thời gian
  • Chuyển đổi giá trị dấu thời gian cơ sở dữ liệu
  • Đặt ngày hết hạn trong mã
  • Phân tích nhật ký và diễn giải dữ liệu chuỗi thời gian

Lợi Ích Chính

  • Chuyển đổi tức thì giữa timestamp Unix và ngày tháng có thể đọc được theo cả hai chiều
  • Timestamp Unix hiện tại thời gian thực được cập nhật mỗi giây với nút sao chép chỉ bằng một cú nhấp chuột
  • Chuyển đổi giữa UTC và giờ địa phương để xác minh các giá trị nhạy cảm với múi giờ
  • Xử lý cả định dạng 10 chữ số (giây) và 13 chữ số (mili giây)
  • Xử lý timestamp âm cho ngày trước Unix Epoch (trước năm 1970)
  • Miễn phí, tức thì và hoạt động trong trình duyệt của bạn mà không cần đăng ký hoặc thu thập dữ liệu

Mẹo Chuyên Nghiệp

  • Luôn lưu timestamp trong UTC trong cơ sở dữ liệu — chuyển đổi sang giờ địa phương chỉ để hiển thị.
  • Nhớ rằng Date.now() của JavaScript trả về mili giây. Để lấy giây: Math.floor(Date.now() / 1000).
  • Sử dụng số nguyên 64 bit để lưu trữ timestamp trong các hệ thống mới để tránh vấn đề tràn năm 2038.
  • Khi gỡ lỗi ngày tháng không mong đợi, trước tiên kiểm tra timestamp đang ở giây hay mili giây — sự khác biệt là 1000 lần.
  • Đối với token xác thực API hoặc URL đã ký, tính timestamp hết hạn phía máy chủ và so sánh với thời gian Unix hiện tại để xác minh tính hợp lệ.

Những Lỗi Thường Gặp Cần Tránh

  • Quên rằng Date.now() của JavaScript trả về mili giây — luôn chia cho 1000 khi so sánh với timestamp dựa trên giây.
  • Giả định tất cả API sử dụng cùng định dạng — một số trả về giây, một số trả về mili giây. Luôn kiểm tra tài liệu API.
  • Không tính đến sự khác biệt múi giờ giữa nơi tạo timestamp và nơi xem nó, khiến ngày tháng có vẻ khác nhau vài giờ.
  • Sử dụng số nguyên 32 bit để lưu trữ timestamp trong hệ thống mới thay vì 64 bit, sẽ tràn vào năm 2038 và phá vỡ ứng dụng.

Các Thuật Ngữ Chính Được Giải Thích

Unix timestamp: Số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970 lúc 00:00:00 UTC (Unix Epoch)
Epoch: Điểm tham chiếu cho việc đo thời gian trong điện toán; đối với Unix, đó là ngày 1 tháng 1 năm 1970 lúc 00:00:00 UTC
UTC (Giờ Phổ thông Cân bằng): Tiêu chuẩn thời gian chính được sử dụng trên toàn thế giới, độc lập với bất kỳ múi giờ nào
Vấn đề năm 2038: Ngày khi timestamp Unix 32 bit sẽ tràn, buộc hệ thống chuyển sang giá trị âm và hiển thị ngày xung quanh năm 1901.
Timestamp mili giây: Timestamp Unix 13 chữ số nơi thời gian được đo bằng mili giây thay vì giây, được sử dụng bởi Date.now() của JavaScript và hầu hết các API hiện đại.

Khái niệm liên quan

  • Kỷ nguyên Unix: 1 tháng 1 năm 1970 00:00:00 UTC, điểm tham chiếu mà tất cả dấu thời gian Unix được đo từ
  • Thời gian Epoch: Hệ thống biểu diễn thời gian dưới dạng số giây đã trôi qua từ kỷ nguyên Unix
  • UTC (Giờ phối hợp quốc tế): Tiêu chuẩn thời gian chính mà thế giới điều chỉnh đồng hồ và thời gian, độc lập múi giờ
  • Vấn đề Năm 2038: Ngày khi dấu thời gian Unix 32-bit sẽ tràn, có thể khiến hệ thống diễn giải ngày là 1901
  • ISO 8601: Tiêu chuẩn quốc tế để biểu diễn ngày và giờ (ví dụ: 2024-06-29T12:00:00Z) thay thế cho dấu thời gian Unix

Ví Dụ

Dấu thời gian hiện tại: 1719676800 → Ngày: 29 tháng 6 năm 2024 12:00:00 PM UTC. Chuyển đổi ngày: "1 tháng 1 năm 2025 00:00:00 UTC" → Dấu thời gian: 1735689600.

Giải thích kết quả của bạn

Bộ chuyển đổi hoạt động theo hai hướng: nhập dấu thời gian Unix cho bạn ngày dễ đọc, và nhập ngày cho bạn dấu thời gian Unix. Giờ Unix hiện tại được hiển thị ở trên cùng với nút làm mới, vì vậy bạn luôn có thể xem dấu thời gian trực tiếp mà không cần nhập bất cứ thứ gì. Dấu thời gian Unix đếm giây từ ngày 1 tháng 1 năm 1970 UTC (kỷ nguyên Unix). Chúng độc lập với múi giờ — cùng một dấu thời gian đại diện cho cùng một khoảnh khắc ở mọi nơi trên Trái Đất. Khi bạn nhập ngày, bộ chuyển đổi sử dụng độ lệch múi giờ địa phương của bạn để tính toán dấu thời gian, nhưng bạn có thể chuyển sang UTC nếu cần kết quả trung lập múi giờ. Vấn đề 2038 đáng để hiểu: số nguyên có dấu 32-bit tràn vào ngày 19 tháng 1 năm 2038, có nghĩa là các hệ thống cũ sử dụng dấu thời gian 32-bit sẽ quay lại giá trị âm. Các hệ thống hiện đại sử dụng dấu thời gian 64-bit sẽ không tràn trong hàng tỷ năm. Nếu bạn gặp ngày không mong muốn quanh năm 1901 hoặc 2038, tràn 32-bit là nguyên nhân có thể.

Câu Hỏi Thường Gặp

Dấu thời gian Unix là gì?
Dấu thời gian Unix là số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970 lúc 00:00:00 UTC (kỷ nguyên Unix). Đây là tham chiếu thời gian phổ quát được sử dụng trong lập trình và điện toán.
Tại sao dấu thời gian hữu ích?
Dấu thời gian cung cấp cách lưu trữ và so sánh thời gian độc lập với múi giờ. Chúng được sử dụng trong cơ sở dữ liệu, API, ghi nhật ký và bất kỳ hệ thống nào cần theo dõi thời gian chính xác.
Vấn đề năm 2038 là gì?
Vào ngày 19 tháng 1 năm 2038, dấu thời gian Unix 32-bit sẽ tràn vì số nguyên có dấu 32-bit tối đa (2.147.483.647) sẽ bị vượt quá. Các hệ thống hiện đại sử dụng dấu thời gian 64-bit để tránh điều này.
Sự khác biệt giữa giây và mili giây trong dấu thời gian là gì?
Dấu thời gian Unix tiêu chuẩn tính bằng giây. JavaScript và nhiều API hiện đại sử dụng mili giây (nhân giây với 1000). Nếu bạn nhận được ngày không mong muốn, hãy kiểm tra xem dấu thời gian tính bằng giây hay mili giây — dấu thời gian mili giây được hiểu là giây sẽ hiển thị ngày rất xa trong tương lai, và ngược lại.
Tại sao dấu thời gian của tôi hiển thị ngày khác với dự kiến?
Các nguyên nhân phổ biến nhất là: dấu thời gian tính bằng mili giây thay vì giây (hoặc ngược lại), chênh lệch múi giờ giữa nơi dấu thời gian được tạo và nơi bạn đang xem, hoặc tràn 32-bit cho các giá trị rất lớn hoặc rất nhỏ. Chuyển đổi giữa UTC và giờ địa phương để loại trừ vấn đề múi giờ.
Tôi có thể chuyển đổi dấu thời gian trước năm 1970 không?
Có. Dấu thời gian trước ngày 1 tháng 1 năm 1970 được biểu diễn bằng số âm. Ví dụ, -86400 đại diện cho ngày 31 tháng 12 năm 1969 lúc 00:00:00 UTC. Bộ chuyển đổi xử lý đúng dấu thời gian âm.
Cơ sở dữ liệu thường sử dụng định dạng nào cho dấu thời gian?
Hầu hết các cơ sở dữ liệu quan hệ (PostgreSQL, MySQL) hỗ trợ cả dấu thời gian Unix (dưới dạng cột số nguyên) và kiểu datetime/timestamp gốc. TIMESTAMPTZ của PostgreSQL lưu trữ dấu thời gian nhận biết múi giờ bên trong. Lựa chọn phụ thuộc vào nhu cầu ứng dụng của bạn — dấu thời gian Unix đơn giản hơn cho so sánh, trong khi kiểu datetime gốc dễ đọc hơn trong truy vấn.
Làm thế nào để xử lý chuyển đổi múi giờ với dấu thời gian Unix?
Dấu thời gian Unix luôn là UTC bên trong. Để hiển thị trong múi giờ địa phương, áp dụng độ lệch múi giờ tại thời điểm hiển thị. Hầu hết các ngôn ngữ lập trình có hàm chuyển đổi múi giờ tích hợp sẵn. Trong JavaScript: new Date(timestamp * 1000).toLocaleString('en-US', { timeZone: 'America/New_York' }).
Giá trị dấu thời gian Unix tối đa là gì?
Số nguyên có dấu 64-bit có thể biểu diễn dấu thời gian lên đến khoảng 292 tỷ năm từ kỷ nguyên — xa hơn nhiều so với tuổi của vũ trụ. Thực tế, dấu thời gian 64-bit sẽ không bao giờ tràn. Giới hạn 32-bit (2.147.483.647 giây) tương ứng với ngày 19 tháng 1 năm 2038 lúc 03:14:07 UTC.
Tại sao một số hệ thống đang rời xa dấu thời gian Unix?
Dấu thời gian Unix mất khả năng đọc đối với con người và không xử lý gọn gàng giây nhuận, thay đổi múi giờ hoặc cải cách lịch. Chuỗi ISO 8601 (ví dụ: 2024-06-29T12:00:00Z) tự tài liệu và nhận biết múi giờ. Tuy nhiên, dấu thời gian Unix vẫn phổ biến nhờ sự đơn giản, nhỏ gọn và độc lập múi giờ trong lưu trữ và tính toán.

Khám Phá Thêm Công Cụ

Những công cụ mới được chọn lọc từ thư viện của chúng tôi.