← Tất cả công cụ

Chuyển Đổi Unix Timestamp

Chuyển đổi Unix timestamp sang ngày tháng và ngược lại tức thì trong trình duyệt. Tìm hiểu epoch time, giây và millisecond, lưu ý UTC và vấn đề năm 2038.

Unix Timestamp không còn là nỗi đau đầu

Hỏi ba lập trình viên bây giờ là mấy giờ và bạn có thể nhận được ba câu trả lời, tùy thuộc vào vị trí của họ. Hỏi một Unix timestamp và bạn nhận được đúng một con số, giống nhau cho mọi người trên hành tinh. Con số nguyên duy nhất đó là lý do tại sao epoch time âm thầm làm nền tảng cho hầu hết mọi file log, hàng trong cơ sở dữ liệu và phản hồi API mà bạn từng chạm vào. Trang này giải thích con số đó có nghĩa là gì, cách đọc nó theo cả hai chiều, và những chỗ nó thường gây rắc rối.

Glowing clock dissolving into a stream of light-digits, representing Unix epoch time
Epoch time là một bộ đếm duy nhất cứ tiếp tục đếm từ năm 1970.

Unix time thực chất là gì

Unix timestamp là số giây đã trôi qua kể từ 00:00:00 UTC ngày 1 tháng 1 năm 1970, không tính giây nhuận. Thời điểm đó được gọi là epoch, và nó được các kỹ sư Unix đầu tiên chọn đơn giản vì đó là ngày tròn tiện lợi để đếm từ đó. Tại epoch, giá trị chính xác là 0. Mỗi giây kể từ đó thêm một, vì vậy con số chỉ tăng lên. Các ngày trước năm 1970 hoàn toàn hợp lệ, được biểu diễn dưới dạng số nguyên âm.

Bạn cũng sẽ thấy khái niệm này được gọi là POSIX time hoặc, một cách lỏng lẻo hơn, là epoch time. Dù nhãn nào, cơ chế đều như nhau: một bộ đếm giây luôn tăng. Vì nó là số nguyên thuần túy chứ không phải chuỗi có định dạng, máy tính có thể lưu nó trong vài byte và so sánh hai giá trị bằng một phép trừ.

Giây, mili giây và các đơn vị khác

Unix time cổ điển đếm giây nguyên, tạo ra con số mười chữ số quen thuộc bạn thấy ngày nay. Nhưng nhiều môi trường cần độ phân giải tốt hơn. JavaScript, chẳng hạn, hoạt động theo mili giây, tạo ra giá trị mười ba chữ số, và một số hệ thống tiến xa hơn đến micro giây hoặc nano giây. Quy tắc ngón tay cái đáng tin: con số mười chữ số là giây, mười ba chữ số là mili giây. Nếu ngày đã chuyển đổi của bạn rơi vào khoảng năm 1970 khi bạn mong đợi hiện tại, gần như chắc chắn bạn đã đưa mili giây vào trường giây, hoặc ngược lại. Bộ chuyển đổi của chúng tôi tự động phát hiện độ lớn để bạn hiếm khi phải đoán.

Tại sao lập trình viên dựa vào nó

Lợi thế lớn là timestamp trung lập về múi giờ. Số nguyên 1735689600 đề cập đến cùng một khoảnh khắc ở Tokyo, Berlin và São Paulo. Lưu con số đó thay vì chuỗi địa phương có định dạng có nghĩa là bạn không bao giờ phải tự hỏi đồng hồ nào một giá trị thuộc về. Sắp xếp cũng đơn giản, vì thứ tự theo thời gian chỉ là thứ tự số, vì vậy chỉ mục cơ sở dữ liệu trên cột timestamp sắp xếp sự kiện đúng cách mà không cần phân tích. Số học cũng gọn gàng không kém: khoảng cách giữa hai sự kiện là một phép trừ, và thêm một ngày là thêm 86400. Những đặc tính này chính xác là lý do log, token, cache và hàng đợi tin nhắn đều dùng epoch time.

Chuyển đổi cả hai chiều

Đi từ timestamp sang ngày đọc được bằng con người có nghĩa là lấy đếm giây và chiếu nó lên lịch, sau đó định dạng theo múi giờ bạn quan tâm. Đi theo chiều ngược lại, bạn lấy năm, tháng, ngày và giờ, quyết định múi giờ nào nó được biểu diễn, và thu gọn trở lại thành giây kể từ epoch. Công cụ của chúng tôi thực hiện cả hai chiều ngay lập tức và hoàn toàn trong trình duyệt của bạn, vì vậy không có gì bạn dán vào rời khỏi máy của bạn. Dán một số để giải mã nó, hoặc chọn một ngày để mã hóa nó, và đọc kết quả theo cả UTC và giờ địa phương của bạn cùng lúc.

Glowing timeline ribbon with a marker sliding along a flowing stream of epoch seconds
Một điểm đánh dấu trên một dòng thời gian, có thể đọc được là cả UTC và giờ địa phương.

UTC so với giờ địa phương, bẫy kinh điển

Bản thân timestamp không có múi giờ; nó luôn neo vào UTC. Sự nhầm lẫn chỉ xuất hiện khi bạn hiển thị nó. Nếu bạn chuyển đổi 1700000000 và màn hình của bạn hiển thị giờ chiều tối trong khi đồng nghiệp ở nước khác thấy buổi chiều, không có gì bị hỏng — cả hai đều đang nhìn vào cùng khoảnh khắc được hiển thị trong đồng hồ địa phương khác nhau. Lỗi xảy ra khi code đọc ngày địa phương như thể nó là UTC, hoặc ghi dấu thời gian đồng hồ tường mà không ghi lại offset. Thói quen an toàn là lưu trữ và truyền UTC, và chỉ áp dụng offset địa phương vào khoảnh khắc cuối cùng, khi bạn hiển thị giá trị cho người dùng. Khi nghi ngờ, hãy so sánh với dòng UTC trong bộ chuyển đổi chứ không phải dòng địa phương.

Vấn đề năm 2038

Nhiều hệ thống cũ hơn lưu Unix time trong số nguyên có dấu 32-bit. Trường đó hết chỗ một giây sau 03:14:07 UTC ngày 19 tháng 1 năm 2038, khi bộ đếm tràn và quay về số âm, có thể ném ngày trở về năm 1901. Đây cùng dòng họ vấn đề với Y2K. Tin tốt là các hệ điều hành và ngôn ngữ hiện đại đã phần lớn chuyển sang timestamp 64-bit, sẽ không tràn trong khoảng 292 tỷ năm, vì vậy với code mới nó chủ yếu là điều tò mò lịch sử đáng biết hơn là một trường hợp khẩn cấp.

Để có thêm các tiện ích chạy trong trình duyệt, xem công cụ dành cho lập trình viên của chúng tôi, và nếu bạn cần làm việc với các con số, máy tính chỉ cần một cú nhấp.

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

Unix timestamp là gì?

Đó là số giây kể từ 00:00:00 UTC ngày 1 tháng 1 năm 1970, không tính giây nhuận. Thời điểm khởi đầu đó được gọi là epoch, và số đếm chỉ tăng theo thời gian.

Tại sao số của tôi chuyển đổi thành ngày gần năm 1970?

Bạn có thể đã nhầm lẫn giây và mili giây. Con số mười chữ số là giây và mười ba chữ số là mili giây. Đưa mili giây vào trường giây sẽ chia thời gian rõ ràng cho khoảng một nghìn, đưa bạn gần với epoch.

Unix timestamp có múi giờ không?

Không. Giá trị luôn neo vào UTC. Múi giờ chỉ xuất hiện khi bạn hiển thị timestamp dưới dạng ngày có thể đọc được, đó là lý do tại sao cùng một số có thể hiển thị giờ đồng hồ tường khác nhau cho các người dùng khác nhau.

Làm thế nào để chuyển đổi ngày trở lại thành timestamp?

Cung cấp năm, tháng, ngày và giờ, quyết định múi giờ nào ngày đó được biểu diễn, và công cụ sẽ thu gọn nó thành giây kể từ epoch. Bạn có thể thực hiện cả hai chiều trên trang này ngay lập tức trong trình duyệt.

Vấn đề năm 2038 là gì?

Các hệ thống lưu Unix time trong số nguyên có dấu 32-bit sẽ tràn một giây sau 03:14:07 UTC ngày 19 tháng 1 năm 2038. Timestamp 64-bit hiện đại tránh điều này trong hàng tỷ năm, vì vậy hầu hết phần mềm hiện tại không bị ảnh hưởng.

Dữ liệu của tôi có được gửi đến server không?

Không. Việc chuyển đổi chạy hoàn toàn trong trình duyệt của bạn, vì vậy bất kỳ timestamp hoặc ngày nào bạn dán vào đều ở lại trên thiết bị của bạn.