यदि कोई अन्य गोले का उपयोग कर रहा है bash
, ksh93
और यदि आपके zsh
पास एक अस्थायी बिंदु $SECONDS
चर है, तो typeset -F SECONDS
सटीकता के साथ समय को मापना आसान हो सकता है:
$ typeset -F SECONDS=0
$ do-something
something done
$ echo "$SECONDS seconds have elapsed"
18.3994340000 seconds have elapsed
चूंकि संस्करण 4.3.13 (2011) zsh
में मॉड्यूल $EPOCHREALTIME
में एक विशेष फ्लोटिंग पॉइंट वैरिएबल है zsh/datetime
:
$ zmodload zsh/datetime
$ echo $EPOCHREALTIME
1364401642.2725396156
$ printf '%d\n' $((EPOCHREALTIME*1000))
1364401755993
ध्यान दें कि यह दो पूर्णांकों (सेकंड और नैनोसेकंड के लिए) से लिया गया है clock_gettime()
। अधिकांश प्रणालियों पर, यह एकल सी double
फ्लोटिंग पॉइंट संख्या की तुलना में अधिक सटीक है , इसलिए जब आप इसे अंकगणितीय अभिव्यक्तियों (1970 के पहले कुछ महीनों में तारीखों को छोड़कर) में उपयोग करते हैं, तो आप सटीक खो देंगे।
$ t=$EPOCHREALTIME
$ echo $t $((t))
1568473231.6078064442 1568473231.6078064
उच्च परिशुद्धता समय के अंतर की गणना करने के लिए (हालांकि मुझे संदेह है कि आपको मिलीसेकंड परिशुद्धता से अधिक की आवश्यकता होगी), आप $epochtime
इसके बजाय विशेष सरणी का उपयोग करना चाह सकते हैं (जिसमें दो अलग-अलग तत्वों के रूप में सेकंड और नैनोसेकंड शामिल हैं)।
संस्करण 5.7 (2018) के बाद से strftime
शेल बिल्ट का भी समर्थन करता है%N
नैनोसेकंड प्रारूप आ ला जीएनयू date
और एक %.
सटीक निर्दिष्ट करने के लिए , इसलिए युग के बाद से मिलीसेकंड की संख्या को भी पुनः प्राप्त किया जा सकता है:
zmodload zsh/datetime
strftime %s%3. $epochtime
(या के साथ एक चर में संग्रहीत -s var
)