ये 2 तारीख आदेश अलग-अलग परिणाम क्यों दे रहे हैं?


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

मुझे "मार्च" देता है, जो महान है - अप्रैल से पहले आने वाला महीना मार्च है। अगर मैं ऐसा करता हूँ:

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

यह मुझे "फरवरी" देता है। यह मेरे पास कुछ और जटिल कोड में बग पैदा कर रहा है। ये 2 आदेश अलग-अलग परिणाम क्यों दिखा रहे हैं?


दोनों ने मुझे दियाMarch
cuonglm

1
जैसा कि थॉमस ने बताया है, यह आपके समयक्षेत्र पर निर्भर है। 13 मार्च को मेरा डीएसटी परिवर्तन - आपका शायद नहीं, इसलिए हो सकता है कि आप एक ही तारीखों पर इस व्यवहार को न देखें, या संभवत: यदि आपके पास कोई डीएसटी परिवर्तन नहीं है।
ताल

जवाबों:


11

आप शेल ट्रेस को चालू करके समस्या देख सकते हैं:

+ 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

जब आप आंतरिक dateकमांड के आउटपुट का उपयोग करते हैं , तो यह अप्रैल की शुरुआत में होता है, और जब ईएसटी / ईडीटी को बदलने के कारण एक महीने का समय घटता है, तो यह बंद हो जाता है:

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

आपके परिणाम, निश्चित रूप से, आपकी स्थानीय समय-सीमा सेटिंग्स के अनुसार अलग-अलग होंगे। ट्रेस को चालू करने से टाइमजोन (मेरे मामले में EDT) दिखाई देगा।

परिणाम भिन्न होने का कारण यह है कि बाद के मामले में आपने अधिक जानकारी दी है date, इसके पैरामीटर को और अधिक विशिष्ट बना दिया है , अर्थात दिन का विशिष्ट समय। पहले भाग में, यह निर्दिष्ट नहीं किया गया था कि dateप्रदर्शन के लिए दिनांक / समय का निर्धारण कैसे किया जाए।


अब मुझे पता है कि यह दिन के उजाले की बचत के समय के साथ करना है (मेरा यहाँ है: timeanddate.com/time/zone/canada/edmonton ), लेकिन मैं अभी भी पीछा नहीं कर रहा हूँ कि क्यों दिनांक कमांड एक ही तारीख को अलग तरीके से व्याख्या करता प्रतीत होता है मुख्य खोल की तुलना में एक सबशेल में। यदि मैं इसके साथ स्क्रिप्ट चलाता हूं: date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"तो मुझे एक ही परिणाम मिलता है, जिसमें एक ही टाइमज़ोन टैग भी शामिल है - दोनों अलग-अलग परिणाम देने से एक महीने पहले क्यों निकाल रहे हैं?
ताल

ओह - आपका अंतिम संपादन स्पष्ट करता है। धन्यवाद
ताल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.