tarih - 1901'den önceki yıllar geçersiz sayılır


11

Sistemime tarih (GNU coreutils) 7.1 yüklü.

14-Aralık-1901'den önceki tarihleri ​​kontrol etmeye çalışırsam, "geçersiz tarih" hatası alıyorum. Örneğin,

  $ date -d 1901-12-13
  date: invalid date `1901-12-13'

  $ date -d 1901-12-14
  Sat Dec 14 00:00:00 EST 1901

dateYardımcı programı 1901'den önceki yıllara geçerli olarak muamele etmek için ne yapmalıyım ?

19 Ocak 2038'den sonraki tarihler için benzer hatalar alıyorum


Hata almıyorum. Coreutils 8.10 kullanıyorum, belki eski bir hata?
xenoterracide

@xenoterracide 64 bitlik bir sistem misiniz?
Mikel

@Mikel evet, ben
xenoterracide

Yanıtlar:


15

İyi soru.

Dokümantasyon buna izin verilmesi gerektiğini söyledi.

 info date 'Date input formats' 'Calendar date items'

Sayısal aylar için, YIL'ın herhangi bir pozitif sayı olduğu ISO 8601 formatına `` YIL-AY-GÜN '' izin verilir, ...

Bir sayı ondan küçükse baştaki sıfır bulunmalıdır.

YEAR 68 veya daha küçükse, buna 2000 eklenir; Aksi takdirde, YEAR 100'den azsa, 1900 eklenir.

32 bit sistemde misiniz?

2038-01-20 tarihinden sonra tarihlerle ilgili bir hata alıyorsunuz, örn.

date -d '2038-01-20'

Öyleyse, GNU tarihi 32 bitlik bir zaman değeri kullanıyor gibi görünüyor.

Nasıl 64 bit sistem kullanmak veya farklı bir araç, örneğin Perl'de DateTime veya Python datetime dışında bunu nasıl düzeltebilirsiniz emin değilim .

Bazı bilgiler:

Unix süreleri, bir tamsayı değeri kullanarak 1 Ocak 1970'ten saniye sayısını sayar. Sistem 32 bit tamsayılar kullanıyorsa, yalnızca 2,1 milyar saniye ileri (2038-01-19 03:14:02 UTC) ve 2,1 milyar saniye geriye (1901-12-13 20:45:52) kadar sayabilir UTC).

Daha fazla bilgi için:


Teşekkürler Mikel, 32 bitlik bir makinede olduğuma inanıyorum. Aslında, ben uzak bir sunucu üzerinde çalışıyorum ve sunucu bile unamekomut ile çok fazla bilgi ortaya alışkanlık dışında diyor ki ben onun i686 makine, 32 bit makineleri olduğunu varsayalım. 2038 problemine gelince, evet, bu sorun uzak sunucuda bir etki var. Girişiniz için tekrar teşekkürler! Çok takdir !!
Jasdeep Singh

Evet, i686 32 bittir. Yardımcı olduğuma sevindim. Daha eski tarihlerle ilgili yardıma ihtiyacınız varsa, önerdiğim Python ve Perl modüllerini deneyin ve çalıştıramazsanız başka bir soru gönderin.
Mikel

7

Sisteminiz (veya en azından bu tarih sürümü ) büyük olasılıkla 32 bit dahili zaman değeri kullanıyor.

Unix dönemi (sıfır zaman değeri) 1970-01-01 00:00:00 UTC'dir. Bu başlangıç ​​noktası 1901-12-13 00:00 EST'yi işaretli 32 bit zaman değeri aralığının hemen dışına koyar.

1901-12-14 00:00:00 EST -2147454000
1901-12-13 15:45:52 EST -2147483648'dir ( INT_MINC cinsinden , minimum 32 bit işaretli tam sayı)
1901-12-13 00:00: 00 EST -2147540400

1901-12-13 15:45:52 EST kullanmayı deneyebilirsiniz. Çalışmalı, ancak bir saniye önce muhtemelen 1901-12-13 00:00 ile aynı şekilde başarısız olacaktır.

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.