2010-03-28 148 views
38

Có lý do nào đằng sau việc sử dụng ngày (ngày 1 tháng 1 năm 1970) làm tiêu chuẩn mặc định cho thao tác thời gian không? Tôi đã thấy tiêu chuẩn này trong Java cũng như trong Python. Hai ngôn ngữ này tôi biết. Có những ngôn ngữ phổ biến nào khác tuân theo cùng một tiêu chuẩn không?Tại sao ngày được tính từ ngày 1 tháng 1 năm 1970?

Vui lòng mô tả.

+0

Một ngôn ngữ phổ biến sau cùng một tiêu chuẩn là PHP, một thời gian bắt đầu điểm khá phổ biến của nó. –

Trả lời

39

Nó là tiêu chuẩn của Unix time.

thời gian Unix, hoặc thời gian POSIX, là một hệ thống để mô tả thời điểm, định nghĩa là số giây trôi qua kể từ nửa đêm proleptic Coordinated Universal Time (UTC) tháng Giêng 1, 1970, không đếm giây nhuận.

+3

Bạn có biết nếu Kernighan và Thompson từng bày tỏ một lý do để chọn khoảnh khắc đó ngoài "Đó là một số vòng hơi trước khi chúng tôi bắt đầu xây dựng điều này."? – dmckee

+0

Đó là sự khởi đầu của một năm, nó ở múi giờ 0 (Zulu). Cả hai đều làm cho mã định dạng ngày đơn giản hơn. –

+14

Không tính số giây nhảy vọt? Tôi không biết chi tiết đó. Sau khi suy nghĩ về nó trong một vài phút, tôi có thể thấy tại sao bạn lại làm theo cách đó, nhưng con người. thế giới của tôi tan vỡ. 24 giây. – keturn

0

Có, C (và gia đình của nó). Đây cũng là nơi Java cũng vậy.

+1

Cảm ơn bạn đã trỏ. Nhưng tại sao? –

6

ngày 1 tháng 1 năm 1970 00:00:00 là điểm zero của POSIX time.

5

Có lý do nào đằng sau việc sử dụng ngày (ngày 1 tháng 1 năm 1970) làm tiêu chuẩn cho thao tác thời gian không?

Không có lý do gì quan trọng.

Python time mô-đun thư viện C. Hỏi Ken Thompson lý do tại sao anh ta chọn ngày đó cho một ngày kỷ nguyên. Có lẽ đó là sinh nhật của ai đó.

Excel sử dụng hai kỷ nguyên khác nhau. Bất kỳ lý do tại sao phiên bản khác nhau của excel sử dụng ngày khác nhau?

Ngoại trừ lập trình viên thực tế, không ai khác biết được lý do tại sao những loại quyết định đó được đưa ra.

Và ...

Nó không quan trọng tại sao ngày được chọn. Nó chỉ là.

Nhà thiên văn học sử dụng ngày kỷ nguyên riêng của họ: http://en.wikipedia.org/wiki/Epoch_(astronomy)

Tại sao? Một ngày phải được chọn để làm cho toán học hoạt động. Bất kỳ ngày ngẫu nhiên nào cũng sẽ hoạt động.

Một ngày xa trong quá khứ tránh số âm cho trường hợp chung.

Một số gói thông minh hơn sử dụng năm Gregorian sinh sôi nảy nở 1. Bất kỳ lý do nào tại sao năm 1?
Có một lý do được đưa ra trong các sách như tính toán theo lịch: nó đơn giản về mặt toán học.

Nhưng nếu bạn nghĩ về điều đó, sự khác biệt giữa 1/1/1 và 1/1/1970 chỉ là năm 1969, một phép toán tầm thường.

+0

Nếu 1/1/1 đã được chọn, chúng tôi sẽ hết giờ (2^31) bây giờ. Khi nó đứng, chúng ta phải đối mặt với một vấn đề như Y2K vào năm 2038 cho các hệ điều hành 32 bit. http://en.wikipedia.org/wiki/Year_2038_problem –

+0

@Chris Nava: Những người sử dụng 1/1/1 ngày, không phải giây. 2 tỷ ngày là khoảng 5 triệu năm. Thường thì họ giữ một cặp (ngày, giờ) để tối đa hóa độ phân giải thời gian; chỉ có 86400 giây trong hầu hết các ngày. –

+0

@ S.Lott: Có. Tôi đã chỉ ra rằng vì hầu hết các phần mềm đếm giây (không phải phút) kể từ thời đại, 1/1/1 đã xa trong quá khứ là một ngày bắt đầu hợp lý. Do đó, một ngày gần đây hơn đã được chọn làm kỷ nguyên máy tính (và bằng cách kết hợp sự khởi đầu của cuộc cách mạng CNTT .-) –

2

Q) "Tại sao ngày được tính từ ngày 1 tháng 1 năm 1970?"

A) Nó phải gần nhất có thể, nhưng bao gồm một số trước đây. Có nhiều khả năng không có lý do quan trọng nào khác vì nhiều người cảm thấy như vậy.

Họ biết nó đặt ra một vấn đề nếu họ đặt nó quá xa vào quá khứ và họ biết nó đã cho kết quả tiêu cực nếu nó là trong tương lai. Không cần phải đi sâu hơn trong quá khứ vì các sự kiện rất có thể xảy ra trong tương lai.

Ghi chú: người Maya, mặt khác, có cần phải đặt sự kiện vào quá khứ, kể từ khi có sự hiểu biết về rất nhiều trong quá khứ, mà họ tạo ra một lịch dài hạn. Chỉ cần đặt tất cả các hiện tượng thường quy vào lịch.

Dấu thời gian không có nghĩa là lịch, đó là một Kỷ nguyên. Và tôi tin rằng những người Maya đã làm nên lịch dài hạn của họ bằng cách sử dụng cùng quan điểm đó. (có nghĩa là họ biết rõ rằng họ không có quan hệ với quá khứ, họ chỉ cần thấy nó trong một quy mô lớn hơn)

2

tại sao nó luôn là ngày 1 tháng 1 năm 1970, vì - 'ngày 1/1/1970' thường được gọi là "ngày epoch" là ngày khi thời gian bắt đầu cho các máy tính Unix và dấu thời gian đó được đánh dấu là '0'. Bất kỳ lúc nào kể từ ngày đó được tính toán dựa trên số giây đã trôi qua. Nói cách đơn giản hơn ... dấu thời gian của bất kỳ ngày nào sẽ khác nhau trong vài giây giữa ngày đó và 'ngày 1 tháng 1 năm 1970' Dấu thời gian chỉ là số nguyên bắt đầu từ số '0' vào 'Midnight 1st January 1970' và tăng dần bởi '1' là mỗi lần truyền thứ hai Để chuyển đổi các dấu thời gian UNIX thành các ngày có thể đọc được PHP và các ngôn ngữ nguồn mở khác cung cấp các hàm dựng sẵn.

23

Các Câu hỏi khiến hai giả định sai:

  • Tất cả thời gian theo dõi trong máy tính được thực hiện như một số-từ-1970.
  • Theo dõi như vậy là tiêu chuẩn.

hai chục kỷ nguyên

Thời gian trong máy tính là không phải lúc nào theo dõi từ đầu năm 1970 UTC. Trong khi đó epoch là phổ biến, các môi trường điện toán khác nhau trong nhiều thập kỷ đã sử dụng ít nhất gần two dozen epochs. Một số là từ nhiều thế kỷ khác. Họ nằm trong khoảng từ năm 0 (zero) đến 2001.

Unix Epoch Common, Nhưng Không Dominant

Sự khởi đầu năm 1970 là phổ biến, có thể là do việc sử dụng nó bởi Unix. Nhưng không có nghĩa là chi phối. Ví dụ:

  • triệu Vô số (tỷ?) Của Microsoft Excel & tài liệu Lotus 1-2-3 sử dụng January 0, 1900 (31 Tháng 12 1899).
  • Thế giới hiện có over a billion iOS/OS X devices bằng cách sử dụng Cocoa (NSDate) epoch của 1 January 2001, GMT.
  • Hệ thống điều hướng vệ tinh GPS sử dụng January 6, 1980 trong khi lựa chọn châu Âu Galileo sử dụng 22 August 1999.

ISO 8601

Giả sử một số từ--kỷ nguyên đang sử dụng kỷ nguyên Unix đang mở một lỗ hổng lớn cho các lỗi.Một số như vậy là không thể cho một con người để giải mã ngay lập tức, do đó, lỗi hoặc các vấn đề sẽ không dễ dàng được gắn cờ khi gỡ lỗi và đăng nhập. Một vấn đề khác là sự mơ hồ về mức độ chi tiết được giải thích bên dưới.

Thay vào đó, tôi đề xuất thay thế các giá trị thời gian ngày thành các chuỗi ISO 8601 rõ ràng thay vì số nguyên từ thời điểm: YYYY-MM-DDTHH:MM:SS.SSSZ chẳng hạn như 2014-10-14T16:32:41.018Z.

đếm kể từ epoch

Một vấn đề với theo dõi thời gian đếm từ-kỷ nguyên là đơn vị thời gian, với ít nhất bốn cấp độ phân giải thường được sử dụng.

  • Giây
    Các cơ sở Unix gốc được sử dụng toàn bộ giây, dẫn đến Year 2038 Problem khi chúng ta đạt tới giới hạn của giây kể từ năm 1970 nếu được lưu trữ như một số nguyên 32-bit.
  • Milliseconds
    Được sử dụng bởi các thư viện Java cũ hơn, bao gồm cả lớp java.util.Date kèm theo và thư viện Joda-Time.
  • Microseconds
    Được sử dụng bởi cơ sở dữ liệu chẳng hạn như Postgres.
  • Nanoseconds
    Được sử dụng bởi các mới java.time package trong Java 8.

Diagram showing different software counting from epoch by seconds, milliseconds, microseconds, or nanoseconds.

Các vấn đề liên quan