Mengapa tanggal dihitung mulai 1 Januari 1970?

98

Apakah ada alasan dibalik penggunaan tanggal (1 Januari 1970) sebagai standar default untuk manipulasi waktu? Saya telah melihat standar ini di Java dan juga di Python. Kedua bahasa ini saya pahami. Apakah ada bahasa populer lainnya yang mengikuti standar yang sama?

Tolong jelaskan.

Vijay Shanker Dubey
sumber
1
Bahasa populer lainnya yang mengikuti standar yang sama adalah PHP, ini merupakan titik awal waktu yang cukup umum.
Greg K

Jawaban:

67

Ini adalah standar waktu Unix.

Waktu Unix, atau waktu POSIX, adalah sistem untuk mendeskripsikan titik-titik dalam waktu, yang didefinisikan sebagai jumlah detik yang berlalu sejak Waktu Universal Terkoordinasi (UTC) proleptik tengah malam tanggal 1 Januari 1970, tidak termasuk detik kabisat.

prajurit
sumber
5
Tahukah Anda jika Kernighan dan Thompson masing-masing mengungkapkan alasan untuk memilih momen itu di luar "Ini adalah bilangan bulat sedikit sebelum kita mulai membangunnya."?
dmckee --- mantan moderator anak kucing
Ini awal tahun, di zona waktu nol (Zulu). Keduanya membuat kode pemformatan tanggal lebih sederhana.
Donal Fellows
28
Tidak menghitung detik kabisat? Saya tidak tahu detail itu. Setelah memikirkannya beberapa saat, saya dapat melihat mengapa Anda melakukannya seperti itu, tetapi man. duniaku hancur. dengan 24 detik.
keturn
70

menggunakan tanggal (1 Januari 1970) sebagai standar default

Pertanyaan tersebut membuat dua asumsi yang salah:

  • Semua pelacakan waktu dalam komputasi dilakukan sebagai hitungan-sejak-1970.
  • Pelacakan semacam itu adalah standar.

Dua Lusin Zaman

Waktu dalam komputasi tidak selalu dilacak sejak awal 1970 UTC . Sementara referensi zaman itu populer, berbagai lingkungan komputasi selama beberapa dekade telah menggunakan setidaknya hampir dua lusin zaman . Beberapa berasal dari abad lain. Mereka berkisar dari tahun 0 (nol) hingga 2001.

Berikut ini beberapa.

0 Januari 1 SM

1 Januari, 1 Masehi

15 Oktober 1582

1 Januari 1601

31 Desember 1840

17 November 1858

30 Desember 1899

31 Desember 1899

1 Januari 1900

1 Januari 1904

31 Desember 1967

1 Januari 1980

6 Januari 1980

1 Januari 2000

1 Januari 2001

Unix Epoch Umum, Tapi Tidak Dominan

Awal tahun 1970 sangat populer, mungkin karena penggunaannya oleh Unix. Tapi sama sekali tidak begitu dominan. Sebagai contoh:

  • Jutaan yang tak terhitung (milyaran?) Penggunaan dokumen Microsoft Excel & Lotus 1-2-3 January 0, 1900(31 Desember 1899).
  • Dunia sekarang memiliki lebih dari satu miliar iOS / perangkat OS X menggunakan Kakao (NSDate) zaman dari 1 January 2001, GMT.
  • The GPS sistem navigasi satelit kegunaan January 6, 1980sedangkan alternatif Eropa Galileo penggunaan 22 August 1999.

ISO 8601

Mengasumsikan hitungan-sejak-zaman menggunakan zaman Unix membuka kerentanan besar bagi bug. Jumlah seperti itu tidak mungkin diuraikan secara instan oleh manusia, sehingga kesalahan atau masalah tidak akan mudah ditandai saat melakukan debug dan logging. Masalah lainnya adalah ambiguitas perincian yang dijelaskan di bawah ini.

Saya sangat menyarankan alih-alih membuat serialisasi nilai tanggal-waktu sebagai string ISO 8601 yang tidak ambigu untuk pertukaran data daripada hitungan integer sejak zaman: YYYY-MM-DDTHH:MM:SS.SSSZseperti 2014-10-14T16:32:41.018Z.

Hitungan Apa Sejak Epoch

Masalah lain dengan pelacakan waktu hitungan-sejak-periode adalah unit waktu, dengan setidaknya empat tingkat resolusi yang biasa digunakan.

  • Detik
    Fasilitas Unix asli menggunakan seluruh detik, yang mengarah ke Masalah Tahun 2038 ketika kita mencapai batas detik sejak 1970 jika disimpan sebagai bilangan bulat 32-bit.
  • Milidetik
    Digunakan oleh pustaka Java lama, termasuk kelas java.util.Date yang dibundel dan pustaka Joda-Time .
  • Microseconds
    Digunakan oleh database seperti Postgres .
  • Nanodetik
    Digunakan oleh paket java.time baru di Java 8.

Diagram yang menunjukkan perangkat lunak berbeda yang dihitung dari waktu ke waktu, milidetik, mikrodetik, atau nanodetik.

Basil Bourque
sumber
1
Saya ingin tahu apa zaman dominan saat ini ... apakah Anda mendasarkannya pada data?
PascalVKooten
1
@PascalVKooten Banyak zaman berbeda digunakan di banyak lingkungan dan sistem perangkat lunak yang berbeda. Jadi tidak ada satu zaman yang dominan. Maksud saya di sini adalah jangan pernah menganggap zaman itu. Ketahui sumber data Anda. Pendekatan terbaik adalah untuk sumber data untuk menghindari masalah epoch sepenuhnya dan cukup gunakan string ISO 8601, IMHO.
Basil Bourque
1
Terima kasih untuk balasan Anda. Saya mengerti bahwa ada banyak, tetapi saya ingin tahu apakah, misalnya, POSIX semakin populer dari waktu ke waktu.
PascalVKooten
Ini menarik dan tidak menjawab mengapa tahun 1970 dipilih menjadi zaman Unix.
tahu0059
7

mengapa selalu 1 januari 1970, Karena - '1 Januari 1970' biasanya disebut sebagai "tanggal waktu" adalah tanggal ketika waktu dimulai untuk komputer Unix, dan stempel waktu itu ditandai sebagai '0'. Kapan pun sejak tanggal tersebut dihitung berdasarkan jumlah detik yang telah berlalu. Sederhananya ... stempel waktu pada tanggal mana pun akan berbeda dalam hitungan detik antara tanggal itu dan '1st Januari 1970' Stempel waktu hanyalah bilangan bulat yang dimulai dari angka '0' pada 'Midnight 1st January 1970' dan terus bertambah dengan '1' sebagai setiap detik berlalu Untuk konversi stempel waktu UNIX ke tanggal yang dapat dibaca PHP dan bahasa sumber terbuka lainnya menyediakan fungsi bawaan.

Friyank
sumber
Mengapa tanggal dihitung dari 1 Januari 1970? Karena tanggal dihitung dari 1 Januari 1970. Ini adalah logika melingkar yang tidak menjawab apapun.
tahu0059
5

Adakah alasan dibalik penggunaan tanggal (1 Januari 1970) sebagai standar untuk manipulasi waktu?

Tidak ada alasan yang penting.

timeModul Python adalah pustaka C. Tanyakan Ken Thompson mengapa dia memilih tanggal itu untuk tanggal penting. Mungkin itu hari ulang tahun seseorang.

Excel menggunakan dua zaman yang berbeda. Adakah alasan mengapa versi excel yang berbeda menggunakan tanggal yang berbeda?

Kecuali programmer sebenarnya, tidak ada orang lain yang akan tahu mengapa keputusan semacam itu dibuat.

Dan...

Tidak masalah mengapa tanggal itu dipilih. Itu baru saja.

Para astronom menggunakan tanggal epochal mereka sendiri: http://en.wikipedia.org/wiki/Epoch_(astronomy)

Mengapa? Tanggal harus dipilih agar matematika berhasil. Tanggal acak apa pun bisa digunakan.

Tanggal yang jauh di masa lalu menghindari angka negatif untuk kasus umum.

Beberapa paket yang lebih cerdas menggunakan proleptic Gregorian year 1. Ada alasan mengapa tahun 1?
Ada alasan yang diberikan dalam buku-buku seperti Kalkulasi Kalender: secara matematis sedikit lebih sederhana.

Tetapi jika Anda memikirkannya, perbedaan antara 1/1/1 dan 1/1/1970 hanyalah 1969, offset matematis yang sepele.

S. Lott
sumber
1
Jika 1/1/1 telah dipilih, kita akan kehabisan detik (2 ^ 31) sekarang. Saat ini, kami menghadapi masalah seperti Y2K pada tahun 2038 untuk sistem operasi 32 bit. en.wikipedia.org/wiki/Year_2038_problem
Chris Nava
1
@ Chris Nava: Orang-orang yang menggunakan 1/1/1 menghitung hari, bukan detik. 2 miliar hari adalah sekitar 5 juta tahun. Seringkali mereka menyimpan pasangan (hari, waktu) untuk memaksimalkan resolusi waktu; hanya ada 86400 detik di kebanyakan hari.
S. Lotot
@ S. Lott: Ya. Saya baru saja menunjukkan bahwa karena sebagian besar perangkat lunak menghitung detik (bukan menit) sejak zaman tersebut, 1/1/1 terlalu jauh di masa lalu untuk menjadi tanggal mulai yang masuk akal. Oleh karena itu, tanggal yang lebih baru dipilih sebagai zaman komputer (dan berdasarkan asosiasi dimulainya revolusi TI. ;-)
Chris Nava
@ Chris Nava: "paling"? Saya berasumsi "sebagian besar" yang Anda maksud adalah "Linux". OS lain tidak bekerja dengan cara yang sama seperti Linux. Masalahnya adalah "masuk akal" dan "mengapa 1/1/1970?" bukanlah pertanyaan yang mudah untuk dijawab; yang terpenting, jawabannya tidak penting. "masuk akal" itu benar, tapi bukan itu alasannya . Alasan mengapa hanya ada sesuatu yang bisa dijawab oleh Ken Thompson.
S. Lotot
3

T) "Mengapa tanggal dihitung dari 1 Januari 1970?"

A) Itu harus sesingkat mungkin, namun menyertakan beberapa masa lalu. Kemungkinan besar tidak ada alasan lain yang signifikan karena banyak orang merasakan hal yang sama.

Mereka tahu itu menimbulkan masalah jika mereka menempatkannya terlalu jauh ke masa lalu dan mereka tahu itu memberi hasil negatif jika itu terjadi di masa depan. Tidak perlu mendalami masa lalu karena peristiwa kemungkinan besar akan terjadi di masa depan.

Catatan: Suku Maya, di sisi lain, memiliki kebutuhan untuk menempatkan peristiwa ke masa lalu, karena mereka memiliki banyak pengetahuan tentang masa lalu, yang karenanya mereka membuat kalender jangka panjang. Hanya untuk menempatkan semua fenomena rutin di kalender.

Stempel waktu tidak dimaksudkan sebagai kalender, ini adalah Epoch. Dan saya yakin suku Maya membuat kalender jangka panjang mereka menggunakan perspektif yang sama. (artinya mereka tahu betul bahwa mereka tidak memiliki hubungan dengan masa lalu, mereka hanya memiliki kebutuhan untuk melihatnya dalam skala yang lebih besar)

Yezpahr
sumber
1

Ya, C (dan keluarganya). Di sinilah Java mengambilnya juga.

Péter Török
sumber