Tarihler neden 1 Ocak 1970'den itibaren hesaplanıyor?


101

Tarihin (1 Ocak 1970) zaman manipülasyonu için varsayılan standart olarak kullanılmasının arkasında herhangi bir neden var mı? Bu standardı Java'da ve Python'da gördüm. Bildiğim bu iki dil. Aynı standardı izleyen başka popüler diller var mı?

Lütfen tanımla.


1
Aynı standardı takip eden diğer bir popüler dil, oldukça yaygın bir başlangıç ​​noktası olan PHP'dir.
Greg K

Yanıtlar:


67

Unix zamanının standardıdır .

Unix zamanı veya POSIX zamanı, 1 Ocak 1970 gece yarısı proleptik Eşgüdümlü Evrensel Zamanından (UTC) bu yana geçen saniye sayısı olarak tanımlanan zamandaki noktaları açıklayan bir sistemdir, artık saniyeleri saymaz.


5
Kernighan ve Thompson'ın o anı seçmenin ötesinde bir neden ifade edip etmediklerini biliyor musunuz? "Bu, biz şeyi inşa etmeye başlamadan önce yuvarlak bir sayıdır."
dmckee --- eski moderatör yavru kedi

Bir yılın başlangıcı, sıfır zaman diliminde (Zulu). Her ikisi de tarih biçimlendirme kodunu daha basit hale getirir.
Donal Fellows

28
Artık saniyeleri saymıyor mu? O detayı bilmiyordum. Birkaç dakika düşündükten sonra, neden böyle yaptığını anlıyorum ama dostum. dünyam paramparça oldu 24 saniye.
keturn

70

varsayılan standart olarak tarih (1 Ocak 1970) kullanma

Soru iki yanlış varsayımda bulunur:

  • Hesaplamadaki tüm zaman takibi, 1970'ten beri yapılan bir sayım olarak yapılır.
  • Bu tür izleme standarttır.

İki Düzine Devir

Hesaplamadaki zaman her zaman 1970 UTC'nin başından itibaren izlenmez . Bu çağ referansı popüler olsa da , on yıllar boyunca çeşitli bilgi işlem ortamları en az yaklaşık iki düzine çağ kullanmıştır . Bazıları diğer yüzyıllardan. Yıl 0 (sıfır) ile 2001 arasında değişir.

Burda biraz var.

0 Ocak MÖ 1

1 Ocak AD 1

15 Ekim 1582

1 Ocak 1601

31 Aralık 1840

17 Kasım 1858

30 Aralık 1899

31 Aralık 1899

1 Ocak 1900

1 Ocak 1904

31 Aralık 1967

1 Ocak 1980

6 Ocak 1980

1 Ocak 2000

1 Ocak 2001

Unix Epoch Yaygın, Ama Baskın Değil

1970'in başlangıcı, muhtemelen Unix tarafından kullanılması nedeniyle popülerdir. Ancak bu hiçbir şekilde baskın değildir. Örneğin:

  • Sayısız milyon (milyarlarca?) Microsoft Excel ve Lotus 1-2-3 belgesi kullanıyor January 0, 1900(31 Aralık 1899).
  • Dünya artık sahip milyardan fazla iOS / OS X cihazlar kullanılarak Kakao (NSDate) devrin ait 1 January 2001, GMT.
  • GPS uydu navigasyon sistemi kullanır January 6, 1980Avrupa alternatif ise Galileo kullanımları 22 August 1999.

ISO 8601

Bir çağdan beri sayımının Unix çağını kullandığını varsaymak, hatalar için büyük bir güvenlik açığı yaratıyor. Böyle bir sayım bir insanın anında deşifre etmesi imkansızdır, bu nedenle hata ayıklama ve günlükleme sırasında hatalar veya sorunlar kolayca işaretlenmez. Diğer bir sorun, aşağıda açıklanan ayrıntı belirsizliğidir.

Bunun yerine, tarih-saat değerlerini, epoch'tan beri bir tamsayı yerine veri değişimi için kesin ISO 8601 dizeleri olarak serileştirmeyi şiddetle öneririm : YYYY-MM-DDTHH:MM:SS.SSSZörneğin 2014-10-14T16:32:41.018Z.

Of Kont Ne Dönemden Beri

Zaman biriminden beri sayımla ilgili diğer bir sorun, en az dört çözünürlük düzeyinin yaygın olarak kullanıldığı zaman birimidir.

  • Saniyeler
    Orijinal Unix tesisleri tam saniye kullandı ve 32 bitlik bir tamsayı olarak saklanırsa 1970'den beri saniye sınırına ulaştığımızda 2038 Yılı Sorununa yol açtı .
  • Milisaniyeler
    Paketlenmiş java.util.Date sınıfı ve Joda-Time kitaplığı dahil olmak üzere eski Java kitaplıkları tarafından kullanılır .
  • Mikrosaniye Postgres
    gibi veritabanları tarafından kullanılır .
  • Nanosaniyeler Java 8'de
    yeni java.time paketi tarafından kullanılır .

Dönemden saniye, milisaniye, mikrosaniye veya nanosaniye olarak sayan farklı yazılımları gösteren diyagram.


1
Şu anda baskın dönem nedir merak ediyorum ... veriye mi dayandırdın?
PascalVKooten

1
@PascalVKooten Birçok farklı ortam ve yazılım sisteminde birçok farklı çağ kullanılmaktadır. Yani tek bir egemen dönem yok. Buradaki amacım, dönemi asla varsaymamak. Veri kaynağınızı bilin. En iyi yaklaşım, bir veri kaynağı için çağ sorununu tamamen önlemek ve sadece ISO 8601 dizeleri, IMHO kullanmaktır.
Fesleğen Bourque

1
Cevabın için teşekkürler. Pek çok olduğunu anlıyorum, ancak örneğin POSIX'in zamanla daha popüler olup olmadığını merak ediyorum.
PascalVKooten

1
Bu ilginç ve hepsi 1970'lerin neden Unix dönemi olarak seçildiğini yanıtlamıyor.
Unknow0059

7

neden her zaman 1 Ocak 1970, Çünkü - '1 Ocak 1970' genellikle "dönem tarihi" olarak adlandırılır, Unix bilgisayarlar için saatin başladığı tarihtir ve bu zaman damgası "0" olarak işaretlenir. Bu tarihten itibaren geçen herhangi bir zaman, geçen saniye sayısına göre hesaplanır. Daha basit bir deyişle ... herhangi bir tarihin zaman damgası, o tarih ile '1 Ocak 1970' arasındaki saniye cinsinden fark olacaktır Zaman damgası, '1 Ocak 1970 Gece Yarısı'nda' 0 'rakamından başlayan ve giderek artan bir tam sayıdır. Her ikinci geçişte '1' ile UNIX zaman damgalarının okunabilir tarihlere dönüştürülmesi için PHP ve diğer açık kaynak dilleri yerleşik işlevler sağlar.


Tarihler neden 1 Ocak 1970'den itibaren hesaplanıyor? Çünkü tarihler 1 Ocak 1970'den itibaren hesaplanıyor. Bu hiçbir şeye cevap vermeyen döngüsel bir mantık.
Unknow0059

6

Tarihin (1 Ocak 1970) zaman manipülasyonu için standart olarak kullanılmasının arkasında herhangi bir neden var mı?

Önemli olan bir sebep yok.

Python'un timemodül olan C kütüphanesi. Ken Thompson'a neden çığır açan bir tarih için bu tarihi seçtiğini sorun. Belki birinin doğum günüydü.

Excel iki farklı çağ kullanır. Farklı excel sürümlerinin farklı tarihler kullanmasının herhangi bir nedeni var mı?

Gerçek programcı dışında hiç kimse bu tür kararların neden alındığını bilmeyecek .

Ve...

Tarihin neden seçildiği önemli değil . Sadece öyleydi.

Gökbilimciler kendi çağ tarihlerini kullanırlar: http://en.wikipedia.org/wiki/Epoch_(astronomy)

Neden? Matematiğin işleyebilmesi için bir tarih seçilmelidir. Herhangi bir rastgele tarih işe yarayacaktır.

Geçmişteki bir tarih, genel durum için negatif sayılardan kaçınır.

Bazı akıllı paketler proleptik Miladi 1. yılını kullanıyor. 1. yıl için herhangi bir sebep var mı?
Calendrical Calculations gibi kitaplarda verilen bir neden vardır: matematiksel olarak biraz daha basittir.

Ama düşünürseniz, 1/1/1 ile 1/1/1970 arasındaki fark sadece 1969, önemsiz bir matematiksel fark.


2
1/1/1 seçilmiş olsaydı şimdiye kadar saniyelerimiz (2 ^ 31) dolmuş olurduk. 2038'de 32 bit işletim sistemleri için Y2K benzeri bir sorunla karşı karşıyayız. en.wikipedia.org/wiki/Year_2038_problem
Chris Nava

1
@Chris Nava: Saniyeleri değil, 1/1/1 günü sayan millet. 2 milyar gün yaklaşık 5 milyon yıldır. Zaman çözünürlüğünü en üst düzeye çıkarmak için genellikle bir (gün, saat) çifti tutarlar; çoğu gün yalnızca 86400 saniye vardır.
S.Lott

@ S.Lott: Evet. Demek istediğim, çoğu yazılım, dönemden bu yana saniyeleri (dakikaları değil) saydığı için, 1/1 / 1'inin makul bir başlangıç ​​tarihi olması çok uzak geçmişte idi. Bu nedenle, bilgisayar çağı olarak daha yakın bir tarih seçildi (ve buna bağlı olarak BT devriminin başlangıcı. ;-)
Chris Nava

@Chris Nava: "çoğu"? "Çoğu" derken "Linux" demek istediğinizi varsayıyorum. Diğer işletim sistemleri, Linux ile aynı şekilde çalışmaz. Sorun şu ki "makul" ve "neden 1/1/1970?" cevaplanması kolay sorular değildir; en önemlisi, cevap önemli değil. "makul" doğrudur, ancak nedeni bu değil . Sebebi neden sadece Ken Thompson, cevap verebilir bir şeydir.
S.Lott


3

S) "Tarihler neden 1 Ocak 1970’den itibaren hesaplanıyor?"

A) Mümkün olduğunca güncel olmalı, ancak biraz geçmiş içermeli. Pek çok insan aynı şekilde hissettiği için büyük olasılıkla başka önemli bir neden yoktu.

Geçmişe çok fazla yerleştirirlerse sorun teşkil edeceğini biliyorlardı ve gelecekte olsaydı olumsuz sonuçlar vereceğini biliyorlardı. Olaylar büyük olasılıkla gelecekte gerçekleşeceği için geçmişte daha derine inmeye gerek yoktu.

Notlar: Öte yandan mayalar, olayları geçmişe yerleştirme ihtiyacına sahipti, çünkü onlar için uzun dönemli bir takvim oluşturdukları pek çok geçmiş hakkında bilgi sahibi oldular. Sadece tüm rutin olayları takvime yerleştirmek için.

Zaman damgası bir takvim anlamına gelmiyordu, bu bir Epoch. Ve ben mayaların uzun vadeli takvimlerini aynı perspektifi kullanarak yaptığına inanıyorum. (yani geçmişle hiçbir ilişkileri olmadığını çok iyi biliyorlardı, sadece onu daha büyük ölçekte görme ihtiyaçları vardı)


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.