Bu 2 tarih komutu neden farklı sonuçlar veriyor?


9
$ date -d "Apr 1 2016 - 1 month" +%B

Bana "Mart" veriyor, ki bu harika - Nisan'dan önce gelen ay Mart. Ancak bunu yaparsanız:

$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B

bana "Şubat" veriyor. Bu bazı daha karmaşık kodda bir hataya neden oluyor. Bu 2 komut neden farklı sonuçlar gösteriyor?


Her ikisi de bana verdiMarch
cuonglm

1
Thomas tarafından açıklandığı gibi, bu saat diliminize bağlıdır. Benim DST 13 Mart'ta değişir - sizinki muhtemelen değişmez, bu nedenle aynı tarihte bu davranışı görmeyebilirsiniz ya da hiç DST değişikliğiniz yoksa hiç görmeyebilirsiniz.
Tal

Yanıtlar:


11

Kabuk izini açarak sorunu görebilirsiniz:

+ date -d 'Apr 1 2016 - 1 month' +%B
March
++ date -d 'Apr 1 2016'
+ date -d 'Fri Apr  1 00:00:00 EDT 2016 - 1 month' +%B
February

İç datekomutun çıktısını kullandığınızda, Nisan ayının en başındadır ve bir ay çıkarıldığında EST / EDT değişikliğine bağlı olarak süreksizlik yaşanır:

+ date -d 'Fri Apr  1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016

Sonuçlarınız, elbette, yerel saat dilimi ayarlarınıza göre değişecektir. İzi açtığınızda saat dilimi gösterilir (benim durumumda EDT).

Sonuçların farklı olmasının nedeni, ikinci durumda daha fazla bilgi vermiş olmanız date, parametresini daha spesifik hale getirmeniz , yani günün belirli bir saatidir. İlk bölümde, bu belirtilmedi, dategörüntülenecek tarih / saatin nasıl belirleneceği hakkında daha fazla boşluk bırakıldı.


Şimdi bunun gün ışığından yararlanma saati ile ilgisi olduğunu anlıyorum (benim burada: timeanddate.com/time/zone/canada/edmonton ), ancak tarih komutunun aynı tarihi neden farklı yorumladığı anlaşılıyor. ana kabuğa göre bir alt kabukta. Eğer bir komut dosyası ile çalıştırırsam date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")", aynı saat dilimi etiketi de dahil olmak üzere tam olarak aynı sonucu alıyorum - neden bir ayın her ikisi de farklı sonuçlar veriyor?
Tal

Oh - son düzenlemeniz bunu netleştiriyor. Teşekkürler
Tal
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.