मुझे कुछ सरल की आवश्यकता है date
, लेकिन वर्तमान तिथि, घंटे, मिनट और सेकंड के बजाय 1970 से सेकंड में।
date
लगता है कि विकल्प की पेशकश नहीं है। क्या कोई आसान तरीका है?
मुझे कुछ सरल की आवश्यकता है date
, लेकिन वर्तमान तिथि, घंटे, मिनट और सेकंड के बजाय 1970 से सेकंड में।
date
लगता है कि विकल्प की पेशकश नहीं है। क्या कोई आसान तरीका है?
जवाबों:
यह काम करना चाहिए:
date +%s
%s seconds since 1970-01-01 00:00:00 UTC
करने के लिए %s seconds since the epoch, 1970-01-01 00:00:00 UTC
क्योंकि मैं वहाँ में यह याद किया।
date
में नहीं बनाया गया है bash
, इसलिए आपके सिस्टम के जहाजों के कार्यान्वयन के bash
साथ आपके संस्करण का कोई लेना-देना नहीं है date
।
date +%s.%N
date +%s%3N
बस जोड़ना है।
किसी भी तारीख (जैसे अक्टूबर 21 1973) के लिए युग (1 जनवरी 1970) के बाद से सेकंड प्राप्त करें।
date -d "Oct 21 1973" +%s
वापस सेकंड की संख्या में परिवर्तित करें
date --date @120024000
आदेश date
बहुत बहुमुखी है। एक और मस्त चीज़ जो आप डेट के साथ कर सकते हैं (बेशर्मी से कॉपी की हुई date --help
)। अमेरिका के पश्चिमी तट पर अगले शुक्रवार को सुबह 9 बजे के लिए स्थानीय समय दिखाएं
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
बेहतर अभी तक, आदमी पृष्ठ http://man7.org/linux/man-pages/man1/date.1.html पढ़ने के लिए कुछ समय लें
date
या क्योंकि मैं उपयोग कर रहा हूँ zsh
(macOS कैटालिना), लेकिन यह मेरे लिए काम नहीं करता है। रनिंग $ date -d "Oct 21 1973" +%s
आउटपुटusage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
अब तक, सभी उत्तर बाहरी प्रोग्राम का उपयोग करते हैं date
।
बश 4.2 के बाद से, printf
एक नया संशोधक %(dateformat)T
है, जब तर्क के साथ प्रयोग किया जाता -1
है वर्तमान तिथि प्रारूप के अनुसार dateformat
, प्रारूप द्वारा strftime(3)
( man 3 strftime
प्रारूप के बारे में जानकारी के लिए) दिया जाता है।
तो, एक शुद्ध बैश समाधान के लिए:
printf '%(%s)T\n' -1
या यदि आपको परिणाम को एक चर में संग्रहीत करने की आवश्यकता है var
:
printf -v var '%(%s)T' -1
कोई बाहरी कार्यक्रम और कोई सदस्यता नहीं!
बश 4.3 के बाद से, यह निर्दिष्ट करना संभव नहीं है -1
:
printf -v var '%(%s)T'
(लेकिन यह हमेशा तर्क देने के लिए समझदार हो सकता है -1
)।
यदि आप -2
इसके बजाय तर्क के रूप में उपयोग करते हैं -1
, तो बैश उस समय का उपयोग करेगा, जो वर्तमान दिनांक के बजाय शेल प्रारंभ किया गया था। इसका उपयोग बीते हुए समय की गणना करने के लिए किया जा सकता है
$ printf -v beg '%(%s)T\n' -2
$ printf -v now '%(%s)T\n' -1
$ echo beg=$beg now=$now elapsed=$((now-beg))
beg=1583949610 now=1583953032 elapsed=3422
-2
स्थिति में उपयोग करना चाहते हैं जब आपके पास एक लंबी दौड़ का काम हो (आप बैकअप को नियंत्रित करने के लिए एक स्क्रिप्ट के बारे में सोचें) और अंत में एक मेल भेजें "बैकअप $ $ में शुरू हुआ $ अब पूरा" - जिसे -2
स्टोर करने से बचने के साथ पूरा किया जा सकता है शुरुआत में समर्पित चर।
अधिकांश आवक कार्यान्वयनों के साथ:
awk 'BEGIN {srand(); print srand()}'
srand()
आमतौर पर वर्तमान तिथि / समय के साथ होता है। srand()
बीज के रूप में पहले इस्तेमाल किए गए मूल्य को वापस करने के लिए दूसरी कॉल ।
चूंकि bash
5.0 ( 7 जनवरी 2019 को जारी किया गया है ) आप अंतर्निर्मित चर का उपयोग कर सकते हैं EPOCHSECONDS
।
$ echo $EPOCHSECONDS
1547624774
वहाँ भी है EPOCHREALTIME
जिसमें सेकंड के अंश शामिल हैं।
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIME
दशमलव बिंदु को हटाकर माइक्रो-सेकंड (μs) में परिवर्तित किया जा सकता है। यह रुचि का हो सकता है जब bash
बिल्ट-इन अंकगणित का उपयोग किया जाए (( expression ))
जो केवल पूर्णांकों को संभाल सकता है।
$ echo ${EPOCHREALTIME/./}
1547624774371215
मुद्रित समय मूल्यों के ऊपर से सभी उदाहरणों में बेहतर पठनीयता के लिए बराबर हैं। वास्तव में समय मान भिन्न होगा क्योंकि प्रत्येक कमांड को निष्पादित होने में बहुत कम समय लगता है।
date +%s%3N
) के लिए आप उपयोग कर सकते हैंecho $(( ${EPOCHREALTIME/./} / 1000 ))
यह एक विस्तार है जो @pellucide ने किया है, लेकिन Mac के लिए:
किसी भी तारीख के लिए युग (1 जनवरी 1970) से सेकंड की संख्या निर्धारित करने के लिए (जैसे 21 अक्टूबर 1973)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
कृपया ध्यान दें, कि पूर्णता के लिए, मैंने समय भाग को प्रारूप में जोड़ दिया है। इसका कारण यह है कि date
आपने जो भी तारीख दी है उसे ले लेंगे और वर्तमान समय को प्रदान किए गए मूल्य में जोड़ देंगे । उदाहरण के लिए, यदि आप '00: 00: 00 'भाग के बिना 4:19 बजे उपरोक्त कमांड निष्पादित करते हैं, तो यह समय को स्वचालित रूप से जोड़ देगा। ऐसे कि "अक्टूबर 21 1973" को "21 अक्टूबर 1973 16:19:00" के रूप में देखा जाएगा। वह नहीं हो सकता है जो आप चाहते हैं।
अपने टाइमस्टैम्प को वापस दिनांक में बदलने के लिए:
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973
दिनांक कार्यान्वयन के लिए Apple का मैन पेज: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html
date
आदेश के लिए है, जबकि किसी भी समाधान का सुझाव date -d
जीएनयू के लिए है date
। MacOS में BSD की तारीख FreeBSD से आती है , और NetBSD और OpenBSD के साथ कई विकल्प साझा करती है। और यह पूरी तरह से बैश से अलग है।
%N
विकल्प gnu तारीख में आंशिक सेकंड के लिए उल्लेख किया MacOS तारीख से लापता है। 10.14 पर, कोई भी प्रारूप मैन पेज में नहीं है; वे strftime(3)
मैन पेज में हैं, जो आपके पास नहीं होगा यदि आपके पास एक्सकोड स्थापित नहीं है, और यदि आप करते हैं तो भी मैन कमांड के साथ नहीं देख सकते हैं।