Thời gian Unix là gì và Kỷ nguyên Unix là khi nào? | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

Thời gian Unix là gì và Kỷ nguyên Unix là khi nào?

Chia sẻ kiến thức 04/03/2022

Unix time (Thời gian Unix) là một hệ thống mà máy tính sử dụng để đo thời gian. Nhưng Unix time hoạt động như thế nào? Và "Unix Epoch (kỷ nguyên Unix) là gì?"

Unix time (Thời gian Unix) là một hệ thống mà máy tính sử dụng để đo thời gian. Nhưng Unix time hoạt động như thế nào? Và "Unix Epoch (kỷ nguyên Unix) là gì?"

Tại sao Unix có khái niệm thời gian riêng? Kỷ nguyên Unix và vấn đề của Y2038 là gì?

Unix time (thời gian Unix) là một phương tiện đại diện cho một ngày và giờ cụ thể, được sử dụng bởi Linux, macOS và nhiều hệ thống tương thích khác. Nó phổ biến đến mức có thể bạn đang sử dụng nó mà không hề hay biết. Tuy nhiên, một khi bạn hiểu Unix time, bạn sẽ nhận ra nó trong nhiều ngữ cảnh. Một số công cụ có thể giúp bạn làm việc với Unix time.

1. Unix Time có mục đích gì?

Thời gian Unix là tổng số giây kể từ một ngày và giờ cố định. Đó là một định dạng ngày/giờ (hoặc dấu thời gian – timestamp) trông khác với những ngày và giờ con người có thể đọc được mà chúng ta đã quen thuộc. Điều này là vì lý do hiệu quả. Sẽ tốn ít dung lượng hơn rất nhiều để lưu trữ một số đại diện cho giây so với lưu trữ các giá trị riêng biệt cho năm, tháng, giờ, v.v.

Tất nhiên, trong điều kiện hiện đại, sự khác biệt về dung lượng không phải là quá nhiều. Nhưng hãy cân nhắc rằng Unix có nguồn gốc từ cuối những năm 1960 khi dung lượng lưu trữ có sẵn nhỏ hơn nhiều so với hiện tại. Dấu thời gian cũng được sử dụng rất nhiều, vì vậy bộ nhớ dành cho chúng cũng không nhỏ. Ví dụ: mỗi tệp có ba dấu thời gian được liên kết với nó.

Định dạng này hầu như không thể được phiên dịch trong đầu bạn trừ khi bạn là một thiên tài toán học. Nhưng nó vẫn có một số lợi thế so với các lựa chọn thay thế dễ đọc hơn như Thứ 4, ngày 21 tháng 10 năm 2015 07:28:00 GMT. Bạn có thể sắp xếp hai dấu thời gian Unix rất dễ dàng chỉ trong nháy mắt. Việc tìm ra sự khác biệt giữa hai dấu thời gian cũng thường nhanh hơn. Điều này đặc biệt đúng đối với những ngày gần nhau, chẳng hạn như vào những ngày liền kề.

Giới thiệu về Kỷ nguyên Unix

Thời gian Unix là tổng số giây kể từ một thời điểm cụ thể. Nhưng đó là thời điểm nào? Đó là 00:00:00 UTC vào ngày 1 tháng 1 năm 1970. Đây thường được gọi là Kỷ nguyên Unix. Các lập trình viên đã chọn ngày này vì đây là ngày tròn gần nhất khi họ phát minh ra thời gian Unix.

2. Định dạng dữ liệu của thời gian Unix

Kiểu dữ liệu ban đầu là một số nguyên 32 bit và nó thường vẫn được dùng, ngay cả trong các hệ thống mạnh hơn nhiều.

Kiểu dữ liệu này cho phép giá trị lưu trữ tổng cộng 2^32 giây, tức là chỉ hơn 136 năm. Giá trị này có thể là âm hoặc dương. Vì vậy, nó thường đại diện cho 68 năm ở hai đầu của kỷ nguyên, tức là 1902-2038.

Tất nhiên, đây vẫn là một khoảng thời gian giới hạn. Nhưng ứng dụng chính của định dạng dấu thời gian là để lưu trữ các mốc như thời gian sửa đổi tệp. Người ta chủ yếu cần đến dấu thời gian để thể hiện thời gian gần với hiện tại, hơn là lịch sử cổ đại hoặc xa trong tương lai. Ngay cả đối với các ứng dụng như lịch, hiếm khi cần thể hiện các ngày cách xa hơn một vài thập kỷ trong tương lai.

Nhưng điều đó không có nghĩa là khoảng thời gian giới hạn này không gây ra vấn đề gì…

Vấn đề năm 2038

Lỗi Y2K (một trong những lỗi lập trình tồi tệ nhất trong lịch sử) đã ảnh hưởng đến các hệ thống máy tính lưu trữ nhiều năm dưới dạng giá trị hai chữ số. Khi năm 2000 xuất hiện, các hệ thống như vậy coi nó như năm 1900. Trong trường hợp này, điều này không gây ra hậu quả thảm khốc như người ta lo sợ, chủ yếu là do nhiều người đã dành rất nhiều thời gian và công sức trước để chuẩn bị cho nó.

Bạn có thể đã phát hiện ra một vấn đề tương tự có thể ảnh hưởng đến thời gian Unix. Thời gian Unix có một vấn đề dữ liệu: vấn đề Y2k38. Khi thời gian Unix thực sự hết vào năm 2038, các hệ thống sẽ coi ngày mới là 1902 hoặc 1970. Hoặc có thể chúng sẽ gặp sự cố nghiêm trọng. 

Tuy vậy, khả năng cao là chúng ta có thể sẽ nâng cấp hầu hết các hệ thống vào năm 2038.

3. Một số tài nguyên hữu ích về dấu thời gian

Trang web Epoch Converter có thể là công cụ chuyển đổi dấu thời gian toàn diện nhất hiện có. Nó hiển thị thời gian Unix hiện tại — trong thời gian thực — và thêm rất nhiều tính năng khác. Công dụng chính của nó là chuyển đổi giữa dấu thời gian và ngày tháng mà con người có thể đọc được, theo cả hai hướng.

Dan’s Tools là một bộ sưu tập khổng lồ các ứng dụng web hữu ích, một trong số đó là công cụ chuyển đổi dấu thời gian. Nó cơ bản hơn, nhưng có một bản trình bày rất rõ ràng và dễ sử dụng.

Time.is có giao diện thậm chí còn tối giản hơn. Nó hiển thị thời gian ở một số định dạng, bao gồm cả thời gian Unix. 

4. Sử dụng Unix Time với các công cụ dòng lệnh

Trên Linux và macOS, chương trình date là tiện ích cốt lõi để xử lý ngày/giờ, bao gồm cả dấu thời gian Unix. Nó trả về ngày/giờ hiện tại ở định dạng con người có thể đọc được:

$ date
Wed Feb 10 12:28:30 GMT 2021

Nếu bạn cần ngày/giờ hiện tại theo thời gian Unix, hãy sử dụng đối số +% s:

$ date +%s
1612960114

Bạn có thể chuyển đổi từ một ngày mà con người có thể đọc được thành một dấu thời gian bằng cách sử dụng flag -d nếu phiên bản date của bạn hỗ trợ nó. Theo mặc định, hầu hết các phiên bản Linux đều có:

$ date -d "Jan 2 1970" +%s
82800

Trên macOS, date là một chương trình khác, yêu cầu một bộ flag khác:

$ date -j -f "%b %d %Y %T" "Jan 02 1970 00:00:00" "+%s"
82800

Hoặc bạn có thể chuyển đổi từ dấu thời gian Unix bằng cách sử dụng flag -r :

$ date -r 1600000000
Sun 13 Sep 2020 13:26:40 BST

Một số chương trình khác sử dụng định dạng % s để xử lý thời gian Unix. Ví dụ: nếu bạn muốn hiển thị ngày sửa đổi của tệp trong Unix time, với phiên bản Linux của ls, bạn có thể sử dụng:

$ ls -l --time-style=+%s index.tmp.html
-rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html

5. Cách sử dụng Unix Time trong ngôn ngữ lập trình

PHP có hàm time () trả về dấu thời gian Unix hiện tại. Hàm date () của nó lấy dấu thời gian làm đối số thứ hai:

$ php -r 'echo date("Y-m-d", time());'
2021-02-11

JavaScript có phương thức Date.now () để lấy số mili giây kể từ kỷ nguyên Unix. Tất nhiên, bạn có thể chia giá trị này cho 1.000 và làm tròn kết quả để đưa ra thời gian Unix tương đương tính bằng giây:

> Math.floor(Date.now() / 1000)
1613083012

6. Hiểu về thời gian Unix

Unix time là một khái niệm đơn giản được sử dụng phổ biến ở nhiều nơi. Một khi bạn hiểu về nó, bạn có thể thấy nó khá hữu ích, chẳng hạn khi tính toán chênh lệch thời gian. Các khái niệm như kỷ nguyên và dấu thời gian là một phần quan trọng để bắt đầu với Linux. 

Dịch từ: https://www.makeuseof.com/what-is-unix-time-and-when-was-the-unix-epoch/

>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:

>>> Xem thêm các chủ đề hữu ích:

Vân Nguyễn

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại