เหตุใดจึงคำนวณวันที่ตั้งแต่ 1 มกราคม 1970


99

มีเหตุผลใดบ้างที่ใช้วันที่ (1 มกราคม 1970) เป็นมาตรฐานเริ่มต้นสำหรับการปรับเวลา ฉันเคยเห็นมาตรฐานนี้ใน Java และใน Python สองภาษานี้ฉันรู้ มีภาษายอดนิยมอื่น ๆ ที่เป็นไปตามมาตรฐานเดียวกันหรือไม่?

กรุณาอธิบาย


1
อีกภาษาที่ได้รับความนิยมตามมาตรฐานเดียวกันคือ PHP ซึ่งเป็นจุดเริ่มต้นของเวลาที่ค่อนข้างธรรมดา
Greg K

คำตอบ:


67

มันเป็นมาตรฐานของเวลา Unix

เวลา Unix หรือเวลา POSIX เป็นระบบสำหรับอธิบายจุดในเวลาซึ่งกำหนดเป็นจำนวนวินาทีที่ผ่านไปนับตั้งแต่เที่ยงคืน Proleptic Coordinated Universal Time (UTC) ของวันที่ 1 มกราคม 1970 โดยไม่นับวินาทีอธิกสุรทิน


5
คุณรู้หรือไม่ว่า Kernighan และ Thompson ทุกคนแสดงเหตุผลในการเลือกช่วงเวลานั้นนอกเหนือไปจาก "มันเป็นตัวเลขกลมๆเล็กน้อยก่อนที่เราจะเริ่มสร้างสิ่งนี้"?
dmckee --- อดีตผู้ดูแลลูกแมว

เป็นจุดเริ่มต้นของปีอยู่ในเขตเวลาศูนย์ (ซูลู) ทั้งสองอย่างนี้ทำให้รหัสการจัดรูปแบบวันที่ง่ายขึ้น
Donal Fellows

28
ไม่นับอธิกวินาที? ฉันไม่ทราบรายละเอียดนั้น หลังจากคิดอยู่ครู่หนึ่งฉันก็เห็นว่าทำไมคุณถึงทำแบบนั้น แต่ผู้ชาย โลกของฉันแตกเป็นเสี่ยง ๆ ภายใน 24 วินาที
keturn

70

โดยใช้วันที่ (1 มกราคม 1970) เป็นมาตรฐานเริ่มต้น

คำถามสร้างสมมติฐานเท็จสองข้อ:

  • การติดตามเวลาทั้งหมดในการคำนวณทำได้นับตั้งแต่ปี 1970
  • การติดตามดังกล่าวเป็นมาตรฐาน

สองโหลยุค

เวลาในการใช้คอมพิวเตอร์จะไม่เคยติดตามจากจุดเริ่มต้นของปี 1970 UTC ในขณะที่การอ้างอิงยุคเป็นที่นิยม, สภาพแวดล้อมการประมวลต่าง ๆ ในช่วงทศวรรษที่ผ่านมาได้ใช้เวลาอย่างน้อยเกือบสองโหล epochs บางส่วนมาจากศตวรรษอื่น ๆ มีตั้งแต่ปี 0 (ศูนย์) ถึงปี 2544

นี่คือบางส่วน

0 มกราคม 1 ปีก่อนคริสตกาล

1 มกราคม ค.ศ. 1

15 ตุลาคม 1582

1 มกราคม 1601

31 ธันวาคม พ.ศ. 2383

17 พฤศจิกายน 2401

30 ธันวาคม พ.ศ. 2442

31 ธันวาคม พ.ศ. 2442

1 มกราคม 1900

1 มกราคม 2447

31 ธันวาคม 2510

1 มกราคม 2523

6 มกราคม 2523

1 มกราคม 2543

1 มกราคม 2544

Unix Epoch ทั่วไป แต่ไม่เด่น

จุดเริ่มต้นของปี 1970 เป็นที่นิยมอาจเป็นเพราะการใช้ Unix แต่ไม่ได้เป็นที่โดดเด่น ตัวอย่างเช่น:

ISO 8601

สมมติว่าการนับตั้งแต่ยุคที่ใช้ Unix epoch กำลังเปิดช่องโหว่ขนาดใหญ่สำหรับจุดบกพร่อง การนับจำนวนดังกล่าวเป็นไปไม่ได้ที่มนุษย์จะถอดรหัสได้ทันทีดังนั้นข้อผิดพลาดหรือปัญหาจะไม่ถูกตั้งค่าสถานะโดยง่ายเมื่อทำการดีบักและบันทึก ปัญหาอีกประการหนึ่งคือความไม่ชัดเจนของรายละเอียดที่อธิบายไว้ด้านล่าง

ฉันขอแนะนำอย่างยิ่งให้จัดลำดับค่าวันที่ - เวลาให้เป็นสตริงISO 8601 ที่ไม่คลุมเครือสำหรับการแลกเปลี่ยนข้อมูลแทนที่จะเป็นจำนวนเต็มนับตั้งแต่ยุค: YYYY-MM-DDTHH:MM:SS.SSSZเช่น2014-10-14T16:32:41.018Z.

นับอะไรตั้งแต่ยุค

ปัญหาอีกประการหนึ่งเกี่ยวกับการติดตามเวลานับตั้งแต่ยุคคือหน่วยเวลาที่มีการใช้ความละเอียดอย่างน้อยสี่ระดับ

  • วินาที
    สิ่งอำนวยความสะดวก Unix ดั้งเดิมใช้เวลาทั้งวินาทีซึ่งนำไปสู่ปัญหาปี 2038เมื่อเราถึงขีด จำกัด ของวินาทีนับตั้งแต่ปี 1970 หากจัดเก็บเป็นจำนวนเต็ม 32 บิต
  • มิลลิวินาทีที่
    ใช้โดยไลบรารี Java รุ่นเก่ารวมถึงคลาส java.util.Date ที่แถมมาและไลบรารีJoda-Time
  • microseconds
    โดยใช้ฐานข้อมูลเช่นPostgres
  • นาโนวินาที
    โดยใช้ใหม่แพคเกจ java.timeในชวา 8

แผนภาพแสดงซอฟต์แวร์ที่แตกต่างกันโดยนับจากยุคเป็นวินาทีมิลลิวินาทีไมโครวินาทีหรือนาโนวินาที


1
ฉันสงสัยว่ายุคที่โดดเด่นในขณะนี้คืออะไร ...
PascalVKooten

1
@PascalVKooten ยุคต่างๆมากมายถูกใช้ในสภาพแวดล้อมและระบบซอฟต์แวร์ที่แตกต่างกันมากมาย ดังนั้นจึงไม่มียุคสมัยใดที่โดดเด่น ประเด็นของฉันที่นี่คืออย่าถือว่ายุค รู้จักแหล่งข้อมูลของคุณ แนวทางที่ดีที่สุดคือแหล่งข้อมูลเพื่อหลีกเลี่ยงปัญหายุคโดยสิ้นเชิงและใช้สตริง ISO 8601, IMHO
Basil Bourque

1
ขอบคุณสำหรับการตอบกลับของคุณ. ฉันเข้าใจว่ามีหลายอย่าง แต่ฉันอยากรู้ว่าเช่น POSIX ได้รับความนิยมมากขึ้นเมื่อเวลาผ่านไปหรือไม่
PascalVKooten

นี่เป็นสิ่งที่น่าสนใจและทั้งหมดนี้ไม่ตอบโจทย์ว่าทำไมปี 1970 จึงถูกเลือกให้เป็นยุค Unix
Unknow0059

7

เหตุใดจึงเป็นวันที่ 1 มกราคม 1970 เสมอเนื่องจาก - '1 มกราคม 1970' มักเรียกว่า "epoch date" คือวันที่เวลาเริ่มต้นสำหรับคอมพิวเตอร์ Unix และการประทับเวลานั้นถูกทำเครื่องหมายเป็น '0' เวลาใด ๆ นับจากวันนั้นจะคำนวณตามจำนวนวินาทีที่ผ่านไป พูดง่ายๆคือ ... การประทับเวลาของวันใด ๆ จะแตกต่างกันเป็นวินาทีระหว่างวันที่นั้นกับ '1 มกราคม 1970' การประทับเวลาเป็นเพียงจำนวนเต็มซึ่งเริ่มจากเลข '0' ใน 'เที่ยงคืน 1 มกราคม 1970' และเพิ่มขึ้นเรื่อย ๆ โดย '1' เป็นแต่ละวินาทีสำหรับการแปลงการประทับเวลา UNIX เป็นวันที่ที่อ่านได้ PHP และภาษาโอเพ่นซอร์สอื่น ๆ มีฟังก์ชันในตัว


เหตุใดจึงคำนวณวันที่ตั้งแต่ 1 มกราคม 1970 เนื่องจากวันที่คำนวณจากวันที่ 1 มกราคม 1970 นี่คือตรรกะแบบวงกลมที่ไม่ตอบโจทย์อะไร
Unknow0059

5

มีเหตุผลใดบ้างที่ใช้วันที่ (1 มกราคม 1970) เป็นมาตรฐานในการกำหนดเวลา

ไม่มีเหตุผลที่สำคัญ

timeโมดูลของ Python คือไลบรารี C ถาม Ken Thompson ว่าทำไมเขาถึงเลือกวันนั้นเป็นวันที่ epochal อาจจะเป็นวันเกิดของใครบางคน

Excel ใช้สองยุคที่แตกต่างกัน สาเหตุใดที่ทำให้ excel เวอร์ชันต่างๆใช้วันที่ต่างกัน

ยกเว้นโปรแกรมเมอร์ตัวจริงไม่มีใครรู้ว่าทำไมถึงตัดสินใจแบบนั้น

และ...

ไม่สำคัญว่าทำไมถึงเลือกวันที่ มันเป็นเพียง

นักดาราศาสตร์ใช้วันที่ epochal ของตนเอง: http://en.wikipedia.org/wiki/Epoch_(astronomy)

ทำไม? ต้องเลือกวันที่เพื่อให้คณิตศาสตร์ออกมาดี วันที่สุ่มใด ๆ จะทำงาน

วันที่ในอดีตหลีกเลี่ยงตัวเลขติดลบสำหรับกรณีทั่วไป

บางส่วนของแพ็คเกจที่ฉลาดกว่านั้นใช้ proleptic Gregorian year 1 เหตุผลใดที่ทำให้ปี 1?
มีเหตุผลที่ระบุไว้ในหนังสือเช่นการคำนวณแบบปฏิทิน: มันง่ายกว่าทางคณิตศาสตร์เล็กน้อย

แต่ถ้าคุณลองคิดดูความแตกต่างระหว่าง 1/1/1 และ 1/1/1970 คือแค่ปี 1969 ซึ่งเป็นค่าชดเชยทางคณิตศาสตร์เล็กน้อย


1
ถ้าเลือก 1/1/1 เราจะหมดวินาที (2 ^ 31) ในตอนนี้ ตามที่กล่าวมาเราต้องเผชิญกับปัญหาคล้าย Y2K ในปี 2038 สำหรับระบบปฏิบัติการ 32 บิต en.wikipedia.org/wiki/Year_2038_problem
Chris Nava

1
@ คริสนาวา: คนที่ใช้ 1/1/1 นับวันไม่ใช่วินาที 2 พันล้านวันคือประมาณ 5 ล้านปี บ่อยครั้งที่พวกเขาเก็บคู่ (วันเวลา) ไว้เพื่อเพิ่มความละเอียดของเวลา ในแต่ละวันมีเพียง 86400 วินาทีเท่านั้น
ล็อตต์

@ S.Lott: ครับ ฉันแค่ชี้ให้เห็นว่าเนื่องจากซอฟต์แวร์ส่วนใหญ่นับเป็นวินาที (ไม่ใช่นาที) นับตั้งแต่ยุค 1/1/1 เป็นวันที่เริ่มต้นที่สมเหตุสมผลในอดีต ดังนั้นวันที่ล่าสุดจึงถูกเลือกให้เป็นยุคคอมพิวเตอร์ (และโดยการเชื่อมโยงการเริ่มต้นของการปฏิวัติไอที ;-)
Chris Nava

@ คริสนาวา: "ที่สุด"? ฉันถือว่า "ส่วนใหญ่" คุณหมายถึง "Linux" ระบบปฏิบัติการอื่นไม่ทำงานเหมือนกับที่ Linux ทำ ประเด็นคือ "สมเหตุสมผล" และ "ทำไม 1/1/1970" คำถามไม่ใช่เรื่องง่ายที่จะตอบ ที่สำคัญที่สุดคำตอบไม่สำคัญ "เหตุผล" เป็นความจริง แต่มันไม่ได้เป็นเหตุผลที่ว่าทำไม เหตุผลที่ว่าทำไมเป็นสิ่งเดียวที่เคน ธ อมป์สันสามารถตอบ
ล็อตต์


3

ถาม) "เหตุใดจึงคำนวณวันที่ตั้งแต่วันที่ 1 มกราคม 1970"

A)ต้องเป็นข้อมูลล่าสุดเท่าที่จะเป็นไปได้ แต่รวมถึงอดีตบางส่วน ส่วนใหญ่ไม่มีเหตุผลอื่นใดที่สำคัญเนื่องจากผู้คนจำนวนมากรู้สึกแบบนั้น

พวกเขารู้ว่ามันก่อให้เกิดปัญหาหากพวกเขาวางมันไว้ในอดีตมากเกินไปและพวกเขารู้ว่ามันให้ผลลัพธ์เชิงลบหากเป็นในอนาคต ไม่จำเป็นต้องเจาะลึกลงไปในอดีตเนื่องจากเหตุการณ์ต่างๆมักจะเกิดขึ้นในอนาคต

หมายเหตุ: ใน ทางกลับกันชาวมายันมีความจำเป็นที่จะต้องวางเหตุการณ์ต่างๆลงในอดีตเนื่องจากพวกเขามีความรู้เกี่ยวกับอดีตมากมายซึ่งพวกเขาสร้างปฏิทินระยะยาว เพียงเพื่อวางปรากฏการณ์ประจำวันทั้งหมดไว้บนปฏิทิน

การประทับเวลาไม่ได้หมายถึงปฏิทิน แต่เป็นยุค และฉันเชื่อว่าชาวมายันสร้างปฏิทินระยะยาวโดยใช้มุมมองเดียวกันนั้น (หมายความว่าพวกเขารู้ดีว่าพวกเขาไม่ได้มีความสัมพันธ์ใด ๆ กับอดีตพวกเขาจำเป็นต้องเห็นมันในระดับที่ใหญ่ขึ้น)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.