2 और 3 महीने के बीच यूनिक्स की तारीख में अंतर क्यों है


16

यह कैसे संभव है और मैं इससे कैसे निपटूं? मैं बैकअप स्क्रिप्ट बना रहा हूं जो यूनिक्स पर निर्भर है dateऔर एक दिलचस्प बग की खोज की है:

[root@web000c zfs_test]# date +%y-%m-%d --date='2 months ago'
14-04-01
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-02-28
[root@web000c zfs_test]# date
Sun Jun  1 00:08:50 CEST 2014

क्या यह एक लीप वर्ष / फरवरी 29 बग हो सकता है? एक उपकरण में संभावना की तरह dateहालांकि ...
मार्क हेंडरसन

जवाबों:


44

गर्मियों के समय (दिन के समय की बचत) के कारण आप इस व्यवहार को देख रहे हैं।

क्योंकि आप वर्तमान में गर्मियों के समय में हैं, जहां आपकी घड़ी एक घंटे आगे है, जब आप तीन महीने पहले पूछते हैं, तो जून की पहली रात को आधी रात के बाद, समय एक घंटे "पहले" समाप्त हो जाता है, क्योंकि यह गर्मी का समय तीन नहीं था महिनो पहले।

जीएनयू तिथि प्रलेखन क्रमशः 12:00 दोपहर और महीने की 15 वीं तारीख को अंक के रूप में काम करने का सुझाव देता है , जब सापेक्ष दिन या महीने के लिए पूछते हैं, क्रमशः। उदाहरण के लिए:

date +%y-%m-%d --date="$(date +%Y-%m-15) -3 month"

धन्यवाद। हां, ठीक "3 महीने पहले" [root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago' 14-03-01 [root@web000c zfs_test]# date Sun Jun 1 01:00:15 CEST 2014
सुबह

रवींद्र! मुझे लगता है कि मुझे अपनी कुछ लिपियों के माध्यम से जाने की आवश्यकता है क्योंकि मुझे संदेह है कि मैंने dateउपयोग पर इस सुझाव की अनदेखी की है ।
कालेब

14

यदि निरपेक्ष समय आपकी प्राथमिक चिंता है, तो संभवत: यह यूटीसी से दूर रहने के लिए सबसे अच्छा है क्योंकि यह इस उद्देश्य के लिए मौजूद है। जब आपको समस्या के अंदर काम करना होता है, तो माइकल का जवाब बहुत उपयोगी होता है, लेकिन आमतौर पर यह एक अच्छा विचार है कि आप इसे पूरी तरह से टाल दें।

जब आपका सिस्टम डिफ़ॉल्ट रूप से UTC पर सेट नहीं होता है, तो समय-सारणी को पारित करने का सबसे सरल तरीका TZपर्यावरण चर के साथ आपकी कमांड को प्रीफ़िक्स कर रहा है। यह ज़ोन स्विच को एक कमांड पर सीमित करता है और चर को आपके बाद के कमांड में लीक होने से बचाता है।

$ NOW=$(date '+%s')
$ date -d @$NOW
Wed Jun 11 23:44:35 EDT 2014
$ TZ=UTC date -d @$NOW
Thu Jun 12 03:44:35 UTC 2014

आपको जो नहीं करना चाहिए वह TZचर निर्यात करना है क्योंकि यह चीजों को समस्या निवारण के लिए बहुत भ्रमित कर सकता है, जैसा कि निम्नलिखित प्रदर्शित करता है।

$ export TZ=UTC
$ date -d @$NOW
Thu Jun 12 03:44:35 UTC 2014
$ TZ=EDT date -d @$NOW
Thu Jun 12 03:44:35 EDT 2014

-3

इस विशिष्ट वर्ष पर कि आपके कंप्यूटर को लगता है कि इसे संचालित किया जा रहा है, और उस विशिष्ट तिथि पर जिसे आपने "1 महीने पहले, 2 महीने पहले और 3 महीने पहले परीक्षण के लिए चुना था, हाँ - यह संभवतः 29 फरवरी की पहचान है। हमेशा नहीं।" एक त्रुटि, लेकिन ..

अब, आज 2014-06-01 नहीं है। पुनः प्रयास करें। 2013-06-01 के लिए कंप्यूटर तिथि निर्धारित करें। पुनः प्रयास करें।
2014-09-01 के लिए कंप्यूटर तिथि निर्धारित करें। पुनः प्रयास करें।


6
यदि आप अमेरिकी MDYप्रारूप में तारीखें प्रदान कर रहे हैं , तो /अलग करने के लिए उपयोग करें । इससे भी बेहतर, क्योंकि हम यहां एक अंतरराष्ट्रीय समुदाय हैं, इसलिए उचित आईएसओ तिथियों का उपयोग करें 2014-09-01
glglgl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.