Unix Timestamp, còn gọi là Unix Time hoặc Epoch Time, là cách biểu diễn thời gian bằng một con số: số giây đã trôi qua kể từ 00:00:00 ngày 1 tháng 1 năm 1970 theo giờ UTC. Vì vậy, khi thấy một hệ thống “bắt đầu tính thời gian từ năm 1970”, đó không phải là máy tính cho rằng lịch sử bắt đầu từ mốc này, mà là một quy ước kỹ thuật được chọn để các chương trình lưu trữ và xử lý thời gian thuận tiện hơn.
Ví dụ, giá trị 0 tương ứng với thời điểm 00:00:00 UTC ngày 01/01/1970. Giá trị 86.400 tương ứng với đúng một ngày sau đó, vì một ngày thông thường có 24 × 60 × 60 = 86.400 giây. Khi cần đối chiếu giờ UTC, Unix Time hoặc chênh lệch múi giờ trong thực tế, người dùng có thể tra cứu trên Bây Giờ Là Mấy Giờ để tránh nhầm giữa giờ địa phương và giờ quốc tế.
Unix Timestamp là gì?

Unix Timestamp là một số nguyên hoặc số thực dùng để biểu diễn một thời điểm cụ thể trên dòng thời gian. Phần lớn hệ thống sử dụng đơn vị giây, nhưng một số ứng dụng cần độ chính xác cao hơn có thể dùng mili giây, micro giây hoặc nano giây.
Cách hiểu cơ bản là:
Unix Timestamp = số giây kể từ 00:00:00 UTC ngày 01/01/1970
Chẳng hạn:
- 0: mốc Epoch, tức thời điểm bắt đầu của Unix Time.
- 60: sau mốc Epoch một phút.
- 3.600: sau mốc Epoch một giờ.
- 86.400: sau mốc Epoch một ngày.
Với các thời điểm sau năm 1970, Timestamp thường là số dương. Với các thời điểm trước năm 1970, Timestamp có thể là số âm. Ví dụ, một thời điểm sớm hơn Epoch một ngày sẽ có giá trị -86.400, nếu hệ thống hỗ trợ cách biểu diễn này.
Vì sao lại chọn ngày 1/1/1970?
Mốc 1/1/1970 được gọi là Unix Epoch. Đây là một quy ước xuất hiện cùng hệ điều hành Unix, được phát triển vào cuối thập niên 1960 và đầu thập niên 1970. Các nhà phát triển cần một cách đơn giản để máy tính lưu và tính toán thời gian. Thay vì phải lưu riêng năm, tháng, ngày, giờ, phút và giây, hệ thống chỉ cần lưu một con số biểu thị khoảng cách từ một mốc cố định.
Ngày 1/1/1970 được chọn vì nó nằm ở thời điểm tương đối gần giai đoạn Unix ra đời, đồng thời tạo ra một mốc dễ thống nhất cho các chương trình. Đây không phải là mốc duy nhất có thể sử dụng. Một hệ thống khác hoàn toàn có thể chọn ngày khác, nhưng Unix trở nên phổ biến nên quy ước này được nhiều ngôn ngữ lập trình, cơ sở dữ liệu, máy chủ và dịch vụ trực tuyến tiếp nhận.
Nói cách khác, máy tính không “đếm thời gian từ năm 1970” theo nghĩa mọi hệ thống trên thế giới đều bắt buộc phải dùng ngày đó. Unix Timestamp là một tiêu chuẩn thực tế rất phổ biến, còn nhiều nền tảng khác có thể dùng định dạng hoặc Epoch riêng.
Unix Time hoạt động như thế nào?
Máy tính lưu Timestamp dưới dạng số. Khi cần hiển thị cho con người, chương trình sẽ chuyển số đó thành ngày, giờ và múi giờ cụ thể. Quá trình này gồm hai bước:
- Xác định số giây đã trôi qua kể từ Unix Epoch.
- Chuyển số giây đó thành lịch và giờ theo UTC hoặc múi giờ được yêu cầu.
Ví dụ, cùng một Timestamp có thể được hiển thị thành một giờ theo UTC, nhưng thành giờ khác khi chuyển sang giờ Việt Nam, giờ Nhật Bản hoặc giờ New York. Bản thân Timestamp không thay đổi; chỉ có cách hiển thị theo múi giờ là thay đổi.
| Khái niệm | Ý nghĩa |
|---|---|
| Unix Epoch | 00:00:00 UTC ngày 01/01/1970 |
| Timestamp | Số giây hoặc đơn vị nhỏ hơn tính từ Epoch |
| UTC | Mốc giờ chuẩn dùng để quy chiếu quốc tế |
| Múi giờ | Cách chuyển thời điểm UTC thành giờ địa phương |
Unix Timestamp khác giờ địa phương như thế nào?

Unix Timestamp biểu diễn một thời điểm tuyệt đối, còn giờ địa phương là cách con người đọc thời điểm đó trong một khu vực cụ thể. Đây là lý do Timestamp rất hữu ích khi các máy chủ ở nhiều quốc gia cần trao đổi dữ liệu.
Việt Nam thường sử dụng múi giờ UTC+7. Nếu một thời điểm được ghi nhận là 00:00 UTC, thời điểm đó tương ứng với 07:00 tại Việt Nam. Khi chuyển sang múi giờ UTC+8, cùng thời điểm sẽ được hiển thị là 08:00. Timestamp vẫn giữ nguyên vì thời điểm thực tế không thay đổi.
Cần phân biệt ba khái niệm sau:
- Timestamp: con số đại diện cho một thời điểm.
- UTC: mốc thời gian chuẩn để so sánh trên toàn cầu.
- Giờ địa phương: giờ hiển thị sau khi áp dụng múi giờ của một nơi.
Nhầm lẫn giữa ba khái niệm này có thể làm lịch họp quốc tế bị lệch giờ, đặc biệt khi phần mềm lưu dữ liệu theo UTC nhưng hiển thị theo giờ địa phương của người dùng.
Unix Timestamp được dùng để làm gì?
1. Lưu thời điểm tạo và cập nhật dữ liệu
Cơ sở dữ liệu thường lưu thời điểm một tài khoản được tạo, một bài viết được cập nhật hoặc một giao dịch phát sinh. Dùng Timestamp giúp dữ liệu có dạng thống nhất và dễ sắp xếp theo trình tự thời gian.
2. So sánh thời gian
So sánh hai con số thường đơn giản hơn so sánh nhiều thành phần ngày, tháng, năm, giờ và phút. Nếu Timestamp A nhỏ hơn Timestamp B thì A xảy ra trước B, miễn là cả hai dùng cùng đơn vị và cùng quy ước.
3. Tính khoảng thời gian
Khoảng cách giữa hai thời điểm có thể tính bằng phép trừ:
Khoảng thời gian = Timestamp kết thúc − Timestamp bắt đầu
Nếu kết quả là 7.200 giây thì khoảng cách giữa hai thời điểm là 2 giờ. Cách tính này thường được dùng cho thời gian chờ, thời hạn phiên đăng nhập, thời lượng video, bộ đếm ngược và lịch chạy tác vụ.
4. Đồng bộ dữ liệu giữa các quốc gia
Một dịch vụ trực tuyến có thể hoạt động tại nhiều múi giờ. Lưu thời điểm dưới dạng UTC hoặc Timestamp giúp máy chủ ghi nhận cùng một thời điểm, sau đó chuyển sang giờ địa phương khi hiển thị cho từng người dùng.
5. Tạo mã thời gian và kiểm soát phiên bản
Một số hệ thống dùng Timestamp để tạo tên tệp, đánh dấu bản ghi, giới hạn thời gian truy cập hoặc xác định thứ tự sự kiện. Tuy nhiên, Timestamp không nên được xem là mã định danh duy nhất tuyệt đối, vì nhiều sự kiện có thể xảy ra trong cùng một giây.
Unix Timestamp tính theo giây hay mili giây?

Đây là một trong những nguyên nhân phổ biến khiến Timestamp bị đọc sai. Có hai dạng thường gặp:
- Unix Timestamp theo giây: thường có khoảng 10 chữ số đối với các thời điểm hiện đại.
- Unix Timestamp theo mili giây: thường có khoảng 13 chữ số đối với các thời điểm hiện đại.
Một Timestamp theo mili giây thường lớn hơn Timestamp theo giây khoảng 1.000 lần. Nếu đưa giá trị mili giây vào hàm chỉ hỗ trợ giây, chương trình có thể trả về một ngày rất xa trong tương lai hoặc báo lỗi.
Trước khi chuyển đổi, cần kiểm tra rõ:
- Đơn vị là giây, mili giây, micro giây hay nano giây?
- Thời điểm đầu vào được hiểu theo UTC hay giờ địa phương?
- Kết quả cần hiển thị theo múi giờ nào?
- Hệ thống có hỗ trợ Timestamp âm hay không?
Cách đổi Unix Timestamp sang ngày giờ
Về nguyên tắc, để đổi Timestamp sang ngày giờ, cần chia số giây thành các đơn vị lớn hơn:
- 1 phút = 60 giây.
- 1 giờ = 3.600 giây.
- 1 ngày = 86.400 giây.
Sau khi xác định số ngày kể từ Epoch, hệ thống tiếp tục tính năm nhuận, số ngày trong từng tháng, rồi xác định giờ, phút và giây còn lại. Đây là phần việc nên giao cho thư viện ngày giờ có sẵn trong ngôn ngữ lập trình thay vì tự viết toàn bộ công thức, vì lịch có nhiều trường hợp đặc biệt.
Khi đọc kết quả, cần xem hệ thống đang trả về UTC hay giờ địa phương. Một Timestamp chuyển thành “12:00” nhưng không kèm múi giờ có thể gây hiểu nhầm, bởi 12:00 UTC và 12:00 tại Việt Nam là hai thời điểm khác nhau.
Timestamp có tính cả năm nhuận và giây nhuận không?
Unix Time không đơn giản là một bản sao đầy đủ của lịch dân dụng. Hệ thống cần xử lý năm nhuận để chuyển số giây thành ngày tháng phù hợp, nhưng cách xử lý giây nhuận có thể khác nhau tùy nền tảng.
Trong cách triển khai phổ biến, Unix Timestamp tăng đều theo giây và không biểu diễn riêng các giây nhuận như một đơn vị đặc biệt. Vì vậy, khi cần độ chính xác khoa học hoặc đo thời gian cực kỳ nghiêm ngặt, không nên mặc định rằng Timestamp phản ánh đầy đủ mọi điều chỉnh của đồng hồ nguyên tử và chuyển động quay của Trái Đất.
Sự cố năm 2038 là gì?
Trên các hệ thống cũ dùng số nguyên 32-bit có dấu để lưu Timestamp theo giây, phạm vi biểu diễn bị giới hạn. Giá trị lớn nhất thường tương ứng với một thời điểm vào tháng 1 năm 2038. Khi vượt quá giới hạn, số có thể bị tràn và chuyển thành giá trị âm, khiến hệ thống hiểu nhầm thời gian trong tương lai thành thời điểm trước Epoch.
Hiện tượng này thường được gọi là Y2K38 hoặc sự cố năm 2038. Không phải mọi thiết bị hay phần mềm đều gặp vấn đề, bởi nhiều hệ thống hiện đại đã dùng kiểu dữ liệu 64-bit hoặc cơ chế thời gian khác. Tuy nhiên, thiết bị cũ, hệ thống nhúng, phần mềm không còn được cập nhật và các ứng dụng phụ thuộc thư viện 32-bit vẫn cần được kiểm tra.
Kiểu dữ liệu 64-bit có phạm vi lớn hơn rất nhiều, đủ để biểu diễn thời gian trong khoảng cực kỳ rộng. Dù vậy, việc chuyển đổi không chỉ là thay đổi kích thước số; nhà phát triển còn phải kiểm tra cơ sở dữ liệu, giao thức truyền dữ liệu, thư viện, định dạng tệp và các chương trình phụ thuộc.
Những lỗi thường gặp khi làm việc với Unix Time
- Nhầm giây với mili giây: dẫn đến ngày giờ sai rất xa.
- Quên múi giờ: cùng một Timestamp nhưng hiển thị lệch vài giờ.
- Tự cộng hoặc trừ giờ bằng tay: dễ sai khi có quy tắc giờ mùa hè ở một số quốc gia.
- Lưu giờ địa phương thay vì UTC: gây khó khăn khi người dùng thay đổi khu vực hoặc dữ liệu được đồng bộ quốc tế.
- Dùng chuỗi ngày tháng không thống nhất: định dạng như ngày/tháng/năm và tháng/ngày/năm có thể bị đọc khác nhau.
- Cho rằng Timestamp là định danh duy nhất: nhiều bản ghi có thể có cùng giá trị nếu được tạo trong cùng một đơn vị thời gian.
Giải pháp an toàn thường là lưu thời điểm theo UTC hoặc Timestamp, ghi rõ đơn vị, sau đó chỉ chuyển sang giờ địa phương ở lớp hiển thị. Khi trao đổi dữ liệu giữa các hệ thống, tài liệu kỹ thuật cũng nên nêu rõ trường thời gian dùng giây hay mili giây.
Unix Timestamp có phải là giờ hiện tại không?
Unix Timestamp không phải một múi giờ và cũng không phải tên của một chiếc đồng hồ riêng. Nó là cách mã hóa thời điểm hiện tại thành một con số. Khi thời gian trôi qua, giá trị Timestamp tăng dần theo đơn vị được sử dụng.
Muốn biết một Timestamp biểu thị mấy giờ, bắt buộc phải chuyển nó thành ngày giờ và xác định múi giờ hiển thị. Vì thế, một con số Timestamp đứng riêng chưa cho biết người dùng ở Việt Nam, Anh, Mỹ hay quốc gia nào đang nhìn thấy giờ địa phương nào.
Điểm quan trọng cần ghi nhớ là: Unix Timestamp giúp máy tính tính toán thời điểm; UTC giúp các hệ thống có chung mốc quy chiếu; còn múi giờ giúp con người đọc thời điểm đó theo vị trí địa lý. Hiểu rõ ba lớp này sẽ giúp tránh phần lớn lỗi khi chuyển đổi ngày giờ, lập lịch quốc tế và xử lý dữ liệu thời gian.


