1/1/1970 से दिनों की गणना करें


10

आप 1/1/1970 से दिनों की संख्या की गणना कैसे कर सकते हैं? यह OpenLDAP पर ShadowLastChange विशेषता को अद्यतन करने के लिए है ।

क्या लिनक्स डेट कमांड का उपयोग करने का कोई तरीका है ?


बैश और सबसे आधुनिक बॉर्न-व्युत्पन्न गोले में, पठनीयता और अन्य कारणों$() से बैकटिक्स पर पसंद किया जाता हैecho $(( $(date ...) / 86400 ))
अगली सूचना तक रोक दिया गया।

अभी तक 2000 नहीं है ... क्या कोई व्यक्ति संपादन कर सकता है और शीर्षक को ठीक कर सकता है :-)
अंगूठी '

जवाबों:


20

ring0 ने मुझे कुछ सेकंड के लिए हराया, लेकिन पूर्ण आदेश है:

echo $(($(date --utc --date "$1" +%s)/86400))

यह UTC के समय से चला जाता है। परिणाम:

root@hostname:~# echo $((`date --utc --date "$1" +%s`/86400))
14984

वुल्फरामअल्फा के साथ एक त्वरित जांच से पता चलता है कि यह सही मूल्य है।


1
लीप सेकंड के बारे में क्या? :)
नेटवॉप

1
@netvope एक अतिरिक्त लीप सेकंड के बाद, यूनिक्स समय को एक बार फिर से रीसेट किया जाता है। इसलिए प्रत्येक दिन ठीक 86400 यूनिक्स सेकंड जोड़ता है। हालाँकि, यूनिक्स का समय 915148800, दोनों यूटीसी 1998-12-31T23: 59: 60 और 1999-01-01T00: 00: 00 en.wikipedia.org/wiki/Unix_time#Leap_sonds
Debilski

9

dateआदेश आप के बाद से सेकंड की संख्या दे सकते हैं 1970-01-01 00:00:00 UTC

  date +"%s"

आप 3600*24दिनों की संख्या (UTC) प्राप्त करने के लिए परिणाम को विभाजित कर सकते हैं ।

जैसे बश में

  x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))

दिनों की संख्या प्रदर्शित करने के लिए।



1

मुझे इसे भी हल करने की आवश्यकता थी, लेकिन मैं दिन के लिए समान मूल्य प्राप्त करना चाहता था # दिन के समय की परवाह किए बिना। यहां दिखाए गए जैसे दृष्टिकोण के साथ, मध्यरात्रि स्थानीय समय के बजाय मध्यरात्रि यूटीसी पर मूल्य बदल जाएगा। यह संभवतः यूरोपीय संघ या यूएस ईस्ट कोस्ट में एक मुद्दे के कम होने जैसा लगता है, जो यूटीसी के काफी करीब हैं कि दिन का मूल्य ठेठ काम के दिन के बीच में नहीं बदलेगा, लेकिन जैसे, कैलिफोर्निया, दिन में बदलाव शाम 4 बजे पीएसटी होगा, जो असुविधाजनक हो सकता है। मुझे लगता है कि ऑस्ट्रेलियाई लोग विशेष रूप से सुबह देर से दिन के मूल्य परिवर्तन से नाराज होंगे।

यदि हम इसके लिए सही करना चाहते हैं, तो हमें sec / day को विभाजित करने से पहले UTC से ऑफसेट को जोड़ना होगा। सौभाग्य से, लिनक्स तिथि कमांड में एक % z प्रारूप अनुक्रम शामिल है जो UTC से ऑफसेट की रिपोर्ट करता है। जबकि मानक प्रारूप (यह परिणाम डेनवर समय, एमडीटी के लिए है):

$ date +%z
-0600

। । । एक गणना में सीधे प्रयोग करने योग्य नहीं है, सही संशोधक जो हम चाहते हैं वह उपज देगा:

$ date +%-:::z
-6

सामान्य सेकंड्स / घंटों / दिनों के रूपांतरण के साथ एक साथ रखें, और मेरा मानना ​​है कि निम्नलिखित को 1/1/1970 के बाद के दिनों का आउटपुट देना चाहिए, 1/1/1970 के साथ ही दिन शून्य हो गया है, और स्थानीय समय पर आधी रात को वेतन वृद्धि हुई है:

echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))

यह साधारण गणना पूरे समय तक यूटीसी से ऑफसेट नहीं होने वाले समय क्षेत्रों के लिए काम नहीं करेगी (उदाहरण के लिए, भारत, TZ = एशिया / कोलकाता), क्योंकि "+5: 30" द्वारा उत्पादित date +%-:::z"अभिव्यक्ति में अमान्य चरित्र" त्रुटि उत्पन्न करेगा जब उपरोक्त कथन में उपयोग किया गया है।

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