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

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

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





Unix time 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, khi bạn hiểu về thời gian Unix, bạn sẽ thấy 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.





Mục đích của Unix Time là 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) trông khác với những ngày và giờ con người có thể đọc được mà chúng ta vẫn quen dùng. Điều này hoàn toàn 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ề không gian không phải là nhiều. Nhưng hãy cân nhắc rằng Unix bắt nguồn từ cuối những năm 1960 khi dung lượng lưu trữ có sẵn nhỏ hơn rất nhiều. Dấu thời gian cũng được sử dụng rất nhiều, vì vậy bộ nhớ của chúng sẽ tăng lên. 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ể dịch được 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ể đặt hàng hai dấu thời gian Unix rất dễ dàng, trong nháy mắt. Việc xác định 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

Vì vậy, 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? Nó là 00:00:00 giờ UTC trên 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ì sự thuận tiện của kỷ nguyên vì đây là ngày tròn gần nhất khi họ phát minh ra thời gian Unix.

Bạn có thể đã xem ngày này khi có điều gì đó không ổn. Đó rõ ràng là một lỗi, nhưng một lỗi trông rất kỳ lạ khi nó dẫn đến một ngày từ trước thời điểm mà nhiều người trong chúng ta được sinh ra! Tuy nhiên, điều đó hoàn toàn dễ hiểu khi bạn biết về Unix time. Nếu bất kỳ hệ thống nào đang cố gắng hiển thị một dấu thời gian không có bất kỳ giá trị nào, nó thường sẽ dịch về 0 và dẫn đến ngày kỷ nguyên chính xác.





được rồi, google tôi có một câu hỏi

Định dạng dữ liệu thời gian Unix

Nói một cách chính xác, không có một cái nào cả. Kiểu dữ liệu ban đầu là một số nguyên 32 bit và điều này thường vẫn xảy ra, ngay cả trong các hệ thống mạnh mẽ 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 thường được ký, có nghĩa là nó có thể âm hoặc dương. Vì vậy, nó thường đại diện cho 68 năm ở hai bên 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 việc sử dụng chính của định dạng dấu thời gian là cho các khái niệm như sửa đổi tệp. Rất cần thiết để 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 phải đại diện cho các ngày 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 có 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 đến, các hệ thống như vậy coi nó như thể nó là năm 1900. Trong trường hợp này, điều này không quá thảm khốc như người ta lo sợ, chủ yếu là do nhiều người đã dành nhiều thời gian và công sức trước để chuẩn bị cho nó.

Nếu bạn đã chú ý trong phần trước, 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. Chà, thời gian Unix có một vấn đề dữ liệu của riêng nó: vấn đề Y2k38. (Nó thường được coi là một vấn đề, không phải một lỗi; có lẽ chúng ta đã trở nên lạc quan hơn kể từ năm 2000!) 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ể là chúng ' Tôi sẽ thất bại hoàn toàn.

Ít nhất thì vấn đề này sẽ không xảy ra với chúng tôi vào lúc nửa đêm của đêm giao thừa. Giây cuối cùng của thời gian Unix 32-bit sẽ rơi vào ngày 19 tháng 3. Cuối cùng, chúng tôi có thể sẽ nâng cấp hầu hết các hệ thống vào năm 2038 hoặc dù sao thì chúng cũng sẽ lỗi thời.

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

Các Công cụ chuyển đổi Epoch trang web có thể là công cụ chuyển đổi dấu thời gian toàn diện nhất hiện có. Nó bắt đầu bằng cách hiển thị thời gian Unix hiện tại - trong thời gian thực - và thêm hầu hết mọi tính năng có thể tưởng tượng được trên đó. 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.

Thời gian là trình bày một cái nhìn khác, 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. Nó bao gồm thời gian hiện tại trong tiêu đề trang của nó rất hữu ích.

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

Trên Linux và macOS, ngày chương trình là tiện ích cốt lõi để xử lý ngày / giờ, bao gồm cả dấu thời gian Unix. Được gọi mà không có bất kỳ đối số nào, 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 trong Unix time, hãy sử dụng +% s tranh luận:

$ 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 -NS gắn cờ nếu phiên bản của bạn ngày hỗ trợ nó. Theo mặc định, hầu hết các phiên bản Linux phải:

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

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

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

Đi theo hướng khác, bạn có thể chuyển đổi từ dấu thời gian Unix bằng cách sử dụng -NS lá cờ:

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

Một số chương trình khác sử dụng %NS định dạng để đối phó với 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 như sau:

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

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

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

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

JavaScript tiếp cận mọi thứ theo một cách thú vị. Nó có một 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

Hiểu 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 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. Bạn cũng có thể nhận ra khi nó có thể là nguyên nhân của một số lỗi.

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. Để tìm hiểu thêm về các yếu tố cần thiết như ls , hãy xem hướng dẫn của chúng tôi về các lệnh Linux cơ bản.

Đăng lại Đăng lại tiếng riu ríu E-mail 9 lệnh cơ bản giúp bạn bắt đầu với Linux

Bạn muốn làm quen với Linux? Bắt đầu với các lệnh Linux cơ bản này để tìm hiểu các tác vụ tính toán tiêu chuẩn.

Đọc tiếp
Chủ đề liên quan Giới thiệu về tác giả Bobby Jack(58 bài báo đã xuất bản)

Bobby là một người đam mê công nghệ, người đã làm việc như một nhà phát triển phần mềm trong gần hai thập kỷ. Anh ấy đam mê chơi game, làm Biên tập viên đánh giá tại Tạp chí Switch Player và đắm mình trong tất cả các khía cạnh của xuất bản trực tuyến và phát triển web.

Xem thêm từ Bobby Jack

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký