Khi nhìn thấy một giá trị như 1.725.000.000 trong cơ sở dữ liệu hoặc URL, nhiều người nghĩ đó là một con số ngẫu nhiên. Thực ra, nó thường là cách máy tính ghi lại thời gian: đếm số giây đã trôi qua kể từ một mốc quy ước. Nếu cần đổi nhanh giữa ngày giờ quen thuộc và dạng số này, maytinhonline.pro có thể được dùng như một công cụ đối chiếu, nhưng điều quan trọng trước hết là hiểu con số đang đại diện cho điều gì.
Máy tính không lưu thời gian giống cách con người đọc lịch

Con người thường nói “10 giờ 30 phút, ngày 5 tháng 6 năm 2024”. Cách biểu đạt này thuận tiện cho giao tiếp, nhưng không phải dạng lý tưởng để phần mềm so sánh, sắp xếp hoặc tính khoảng cách giữa hai thời điểm. Máy tính cần một biểu diễn đơn giản hơn, có thể đưa vào phép trừ hoặc phép cộng.
Vì vậy, nhiều hệ thống chuyển thời gian thành một số nguyên. Số đó cho biết đã có bao nhiêu đơn vị thời gian trôi qua kể từ một mốc cố định. Đơn vị phổ biến nhất là giây, nhưng cũng có hệ thống dùng mili giây, microgiây hoặc nano giây.
Ví dụ, thay vì lưu hai trường riêng là ngày và giờ, chương trình có thể lưu:
- thời điểm bắt đầu: một số nguyên;
- thời điểm kết thúc: một số nguyên khác;
- thời lượng: hiệu của hai số đó.
Cách làm này giúp máy tính xử lý thời gian như dữ liệu số thông thường. Muốn biết một sự kiện kéo dài bao lâu, phần mềm chỉ cần lấy thời điểm kết thúc trừ thời điểm bắt đầu, thay vì phải tự xử lý số ngày trong từng tháng, năm nhuận và phần giờ vượt qua nửa đêm.
“Con số khổng lồ” thường là Unix timestamp

Một dạng biểu diễn rất phổ biến được gọi là Unix timestamp, hay Unix time. Theo quy ước thông dụng, nó đếm số giây kể từ 00:00:00 UTC ngày 1 tháng 1 năm 1970. Mốc này thường được gọi là Unix epoch.
Chẳng hạn, nếu một thời điểm có timestamp là 0 thì đó chính là mốc Unix epoch. Một thời điểm xảy ra sau mốc này có timestamp dương; một thời điểm xảy ra trước mốc này có thể có timestamp âm, tùy cách thư viện hoặc hệ thống biểu diễn.
Có thể hình dung bằng công thức đơn giản:
Timestamp = số giây từ thời điểm cần biểu diễn đến Unix epoch
Hoặc khi cần khôi phục thời gian:
Thời điểm = Unix epoch + số giây được lưu
Do một năm có khoảng vài chục triệu giây, chỉ sau vài chục năm, giá trị này đã trở thành một số có hàng tỷ đơn vị. Nó trông lớn không phải vì máy tính “không biết ngày tháng”, mà vì toàn bộ khoảng thời gian từ năm 1970 đến thời điểm hiện tại đã được gói vào một phép đếm liên tục.
Vì sao chọn mốc năm 1970?
Mốc năm 1970 xuất phát từ lịch sử của hệ điều hành Unix và các hệ thống máy tính liên quan. Khi Unix được phát triển, việc chọn một mốc thời gian chung giúp chương trình dễ dàng lưu và tính toán thời gian. Unix epoch không phải là điểm bắt đầu của lịch nhân loại, cũng không phải một ngày có ý nghĩa đặc biệt trong thiên văn học. Đây chủ yếu là một quy ước kỹ thuật.
Một quy ước tốt cần có ba đặc điểm: dễ ghi nhớ, ổn định và được nhiều chương trình sử dụng thống nhất. Khi hệ sinh thái Unix trở nên phổ biến, cách tính này lan rộng sang ngôn ngữ lập trình, cơ sở dữ liệu, máy chủ web, hệ thống đăng nhập và nhiều thiết bị khác.
Điều đó giải thích vì sao cùng một kiểu số có thể xuất hiện ở nhiều nơi:
- thời điểm tạo hoặc cập nhật tệp;
- thời gian người dùng đăng nhập;
- thời hạn của phiên làm việc và mã xác thực;
- thời gian ghi nhận giao dịch;
- mốc bắt đầu hoặc kết thúc một sự kiện trong ứng dụng;
- thời điểm gửi dữ liệu từ thiết bị lên máy chủ.
Con số này có phải lúc nào cũng tính bằng giây?
Không. Đây là một trong những nguyên nhân phổ biến khiến người dùng đọc sai thời gian.
Nếu timestamp được tính bằng giây, một giá trị thường có khoảng 10 chữ số trong nhiều thời điểm của thế kỷ hiện nay. Nếu tính bằng mili giây, giá trị có thể dài hơn khoảng ba chữ số, bởi một giây được chia thành 1.000 mili giây. Timestamp tính bằng microgiây hoặc nano giây còn lớn hơn nữa.
| Đơn vị | Quan hệ với một giây | Ngữ cảnh thường gặp |
|---|---|---|
| Giây | 1 giây | Unix timestamp truyền thống, API và cơ sở dữ liệu |
| Mili giây | 1/1.000 giây | Trình duyệt, ứng dụng, nhật ký sự kiện |
| Micro giây | 1/1.000.000 giây | Đo hiệu năng và hệ thống cần độ chính xác cao |
| Nano giây | 1/1.000.000.000 giây | Đo thời gian rất ngắn trong hệ thống chuyên dụng |
Vì thế, không nên chỉ nhìn độ dài của con số rồi đoán ngày giờ. Cần kiểm tra tài liệu của API, tên trường dữ liệu hoặc quy ước của phần mềm. Một dấu hiệu thường gặp là giá trị mili giây lớn hơn timestamp tính bằng giây khoảng 1.000 lần tại cùng một thời điểm.
Timestamp giúp máy tính làm được những gì?

So sánh hai thời điểm
Hai timestamp có thể được so sánh trực tiếp. Số nhỏ hơn biểu thị thời điểm sớm hơn, số lớn hơn biểu thị thời điểm muộn hơn, nếu cả hai dùng cùng đơn vị và cùng mốc.
Ví dụ, hệ thống có thể xác định bản ghi nào được tạo trước bằng cách sắp xếp cột timestamp theo thứ tự tăng dần. Đây là thao tác đơn giản hơn so với việc tách riêng năm, tháng, ngày, giờ, phút rồi so sánh từng phần.
Tính khoảng thời gian
Giả sử hai thời điểm được lưu bằng giây:
Thời lượng = timestamp kết thúc − timestamp bắt đầu
Nếu kết quả là 3.600, khoảng cách giữa hai mốc là một giờ. Nếu hệ thống dùng mili giây, kết quả tương ứng của một giờ sẽ lớn hơn 1.000 lần. Sau khi có số giây, chương trình có thể quy đổi thành ngày, giờ, phút và giây để hiển thị cho người dùng.
Đặt thời hạn và kiểm tra hết hạn
Một mã xác thực có thể được gắn với thời điểm hết hạn. Khi người dùng gửi mã, máy chủ so sánh thời điểm hiện tại với timestamp hết hạn. Nếu thời điểm hiện tại lớn hơn mốc hết hạn, mã bị từ chối.
Tương tự, bộ nhớ đệm có thể lưu thời điểm tạo và thời gian sống. Hệ thống không cần ghi lại một bộ đếm riêng liên tục; chỉ cần so sánh thời gian hiện tại với thời điểm đã lưu.
Timestamp khác múi giờ như thế nào?
Timestamp kiểu Unix thường biểu diễn một thời điểm tuyệt đối theo UTC, không trực tiếp mang thông tin “giờ Việt Nam”, “giờ Nhật Bản” hay “giờ New York”. Múi giờ chỉ xuất hiện khi con người yêu cầu chuyển con số đó thành dạng lịch để đọc.
Vì vậy, cùng một timestamp có thể được hiển thị thành các giờ địa phương khác nhau, nhưng vẫn là cùng một khoảnh khắc. Ví dụ, máy chủ đặt ở một quốc gia và người dùng ở quốc gia khác có thể thấy hai dòng giờ khác nhau cho cùng một sự kiện. Nếu hệ thống lưu đúng timestamp và chuyển đổi múi giờ đúng lúc hiển thị, dữ liệu vẫn nhất quán.
Đây là lý do nên phân biệt:
- Thời điểm: khoảnh khắc cụ thể trên dòng thời gian, thường có thể biểu diễn bằng timestamp UTC.
- Giờ địa phương: cách hiển thị thời điểm theo múi giờ của người xem.
- Ngày theo lịch: nhãn ngày có thể thay đổi khi chuyển múi giờ, nhất là gần nửa đêm.
Một lỗi thường gặp là lấy giờ địa phương rồi xử lý như UTC, hoặc ngược lại. Khi đó thời gian có thể bị lệch vài giờ dù phép chuyển đổi số học vẫn hoàn toàn đúng.
Những giới hạn cần biết
Sự cố năm 2038
Trong một số hệ thống cũ, timestamp được lưu bằng số nguyên có dấu 32 bit và tính theo giây. Kiểu dữ liệu này có giới hạn trên. Khi giá trị vượt giới hạn đó, hệ thống có thể bị tràn số và biểu diễn thành một thời điểm sai. Vấn đề này thường được gọi là Year 2038 problem.
Không phải mọi máy tính hiện nay đều gặp lỗi này. Hệ điều hành, ngôn ngữ lập trình và cơ sở dữ liệu hiện đại có thể dùng kiểu dữ liệu rộng hơn, chẳng hạn số nguyên 64 bit. Tuy nhiên, phần mềm cũ, thiết bị nhúng hoặc dữ liệu truyền qua giao diện tương thích lâu năm vẫn cần được kiểm tra.
Độ chính xác không đồng nghĩa với độ tin cậy
Một timestamp có nhiều chữ số sau dấu thập phân không nhất thiết cho biết đồng hồ hệ thống chính xác đến mức đó. Giá trị có thể được lưu ở dạng micro giây, nhưng đồng hồ thực tế, mạng truyền dữ liệu hoặc quy trình ghi log chưa chắc đủ ổn định để xác định chính xác từng micro giây.
Cần phân biệt ba khái niệm:
- Độ phân giải: đơn vị nhỏ nhất mà hệ thống có thể lưu.
- Độ chính xác: mức gần với thời điểm thực tế.
- Độ đồng bộ: mức thống nhất giữa nhiều máy hoặc nhiều đồng hồ.
Giây nhuận và các quy ước thời gian
Trong thực tế, việc đo thời gian liên quan đến nhiều chuẩn khác nhau. Unix time thường được mô tả đơn giản bằng số giây kể từ epoch, nhưng cách các hệ thống xử lý giây nhuận và điều chỉnh đồng hồ có thể không hoàn toàn giống nhau. Vì vậy, trong các ứng dụng thông thường, nên tuân thủ quy ước của thư viện hoặc nền tảng đang sử dụng thay vì tự xây dựng bộ chuyển đổi thời gian.
Cách nhận biết và chuyển đổi một timestamp
Khi gặp một con số nghi là thời gian, có thể kiểm tra theo quy trình sau:
- Xác định mốc: xem dữ liệu có dùng Unix epoch hay một mốc riêng của hệ thống.
- Xác định đơn vị: kiểm tra đó là giây, mili giây hay đơn vị nhỏ hơn.
- Xác định múi giờ hiển thị: kết quả cần đọc theo UTC hay giờ địa phương.
- Kiểm tra kiểu dữ liệu: xem số có thể âm, có phần thập phân hoặc có giới hạn kích thước hay không.
- Đối chiếu với một thời điểm đã biết: nếu kết quả rơi vào một ngày vô lý, rất có thể đã nhầm đơn vị hoặc múi giờ.
Về mặt logic, chuyển timestamp tính bằng mili giây sang giây thường là chia cho 1.000. Sau đó, lấy số giây kể từ epoch và đưa qua thư viện ngày giờ của ngôn ngữ lập trình. Không nên tự cộng trừ số ngày theo cách thủ công trong các chương trình quan trọng, vì lịch có năm nhuận, số ngày trong tháng không đều và quy tắc múi giờ có thể thay đổi.
Vì sao không lưu luôn chuỗi “ngày/tháng/năm”?
Chuỗi ngày giờ dễ đọc với con người, nhưng có nhiều nhược điểm khi dùng làm dữ liệu chính. Các quốc gia có thể dùng thứ tự ngày-tháng-năm hoặc tháng-ngày-năm khác nhau. Người dùng cũng có thể viết tháng bằng chữ, bỏ số 0 ở đầu hoặc dùng những cách viết không thống nhất.
Timestamp dạng số giúp giảm sự mơ hồ và thuận tiện cho máy xử lý. Tuy nhiên, nó không thay thế hoàn toàn dạng ngày giờ dễ đọc. Cách làm phù hợp thường là lưu một giá trị chuẩn để máy tính tính toán, sau đó định dạng thành ngày giờ địa phương khi hiển thị cho người dùng.
Nói ngắn gọn, con số khổng lồ không phải là “một ngày tháng bị mã hóa bí ẩn”. Nó là chiếc thước đo đặt trên dòng thời gian: mốc càng xa Unix epoch thì số càng lớn. Muốn đọc đúng, chỉ cần xác định mốc, đơn vị và múi giờ. Ba thông tin đó thường đủ để biến một dãy chữ số khó hiểu thành thời điểm cụ thể và giúp tránh những lỗi phổ biến khi lưu trữ, so sánh hoặc chuyển đổi thời gian.