जवाबों:
ring0 ने मुझे कुछ सेकंड के लिए हराया, लेकिन पूर्ण आदेश है:
echo $(($(date --utc --date "$1" +%s)/86400))
यह UTC के समय से चला जाता है। परिणाम:
root@hostname:~# echo $((`date --utc --date "$1" +%s`/86400))
14984
वुल्फरामअल्फा के साथ एक त्वरित जांच से पता चलता है कि यह सही मूल्य है।
मुझे लगता है कि यह सबसे सरल विधि है:
expr $(date +%s) / 86400
मुझे इसे भी हल करने की आवश्यकता थी, लेकिन मैं दिन के लिए समान मूल्य प्राप्त करना चाहता था # दिन के समय की परवाह किए बिना। यहां दिखाए गए जैसे दृष्टिकोण के साथ, मध्यरात्रि स्थानीय समय के बजाय मध्यरात्रि यूटीसी पर मूल्य बदल जाएगा। यह संभवतः यूरोपीय संघ या यूएस ईस्ट कोस्ट में एक मुद्दे के कम होने जैसा लगता है, जो यूटीसी के काफी करीब हैं कि दिन का मूल्य ठेठ काम के दिन के बीच में नहीं बदलेगा, लेकिन जैसे, कैलिफोर्निया, दिन में बदलाव शाम 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
"अभिव्यक्ति में अमान्य चरित्र" त्रुटि उत्पन्न करेगा जब उपरोक्त कथन में उपयोग किया गया है।
$()
से बैकटिक्स पर पसंद किया जाता है ।echo $(( $(date ...) / 86400 ))