जवाबों:
date +%s
युग के बाद से सेकंड की संख्या वापस आ जाएगी ।
date +%s%N
सेकंड और वर्तमान नैनोसेकेंड देता है।
date +%s%N | cut -b1-13
युग के बाद से आपको मिलीसेकंड की संख्या देगा - वर्तमान सेकंड और नैनोसेकेंड के बाएं तीन।
और मिकीबी से - echo $(($(date +%s%N)/1000000))(1000 से विभाजित करके केवल माइक्रोसेकंड में लाया जाता है)
echo $(($(date +%s%N)/1000))
आप बस %3N3 सबसे महत्वपूर्ण अंकों (जो तब मिलीसेकंड हैं) के लिए नैनोसेकंड को छोटा करने के लिए उपयोग कर सकते हैं:
$ date +%s%3N
1397392146866
यह मेरे kubuntu 12.04 पर उदा काम करता है।
लेकिन ध्यान रखें, यह %Nआपके लक्ष्य प्रणाली के आधार पर लागू नहीं किया जा सकता है। उदाहरण के लिए एक एम्बेडेड सिस्टम (बिल्ड रूटोट, एक गैर-एचएफ आर्म क्रॉस टूलकिन का उपयोग करके) का परीक्षण किया गया था, वहां कोई नहीं था %N:
$ date +%s%3N
1397392146%3N
(और भी मेरे (गैर निहित) एंड्रॉयड टैबलेट के पास नहीं है %N)।
1397392146%3Nकरने के लिए 1397392146%N, लेकिन के उत्पादन में 1397392146%3Nक्या मैं वास्तव में मेरे एंड्रॉयड टैबलेट की बिजीबॉक्स कंसोल पर देखा था कि है। क्या आप अपना संपादन समझा सकते हैं?
date +%s.%3Nप्रिंट करता है 1510718281.134।
date +%N OS X पर काम नहीं करता है, लेकिन आप इनमें से किसी एक का उपयोग कर सकते हैं
ruby -e 'puts Time.now.to_f'python -c 'import time; print time.time()'node -e 'console.log(Date.now())'php -r 'echo microtime(TRUE);'DateTime.utc_now() |> DateTime.to_unix(:millisecond)wget -qO- http://www.timeapi.org/utc/now?\\s.\\Ndate +%s000node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
मिलि सेकंड पाने के लिए बाहरी प्रोग्राम चलाने का सुझाव देने वाले लोगों के लिए ... उस दर पर, आप ऐसा कर सकते हैं:
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
बिंदु जा रहा है: यहाँ से किसी भी उत्तर को चुनने से पहले, कृपया ध्यान रखें कि सभी कार्यक्रम एक दूसरे के तहत नहीं चलेंगे। उपाय!
dateको चलाने के लिए 3 ms लगते हैं।
यह समाधान macOS पर काम करता है।
यदि आप बैश स्क्रिप्ट का उपयोग करने पर विचार करते हैं और अजगर उपलब्ध है, तो आप इस कोड का उपयोग कर सकते हैं:
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
यदि आप अपनी स्क्रिप्ट को चलाने के समय की लंबाई प्रदर्शित करने का एक तरीका ढूंढ रहे हैं, तो निम्नलिखित एक (पूरी तरह से सटीक नहीं) परिणाम प्रदान करेगा:
जैसे ही आप अपनी स्क्रिप्ट की शुरुआत कर सकते हैं, निम्नलिखित दर्ज करें
basetime=$(date +%s%N)
यह आपको 1361802943996000000 जैसे कुछ का शुरुआती मूल्य देगा
अपनी स्क्रिप्ट के अंत में, निम्नलिखित का उपयोग करें
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
जो कुछ इस तरह प्रदर्शित करेगा
runtime: 12.383 seconds
टिप्पणियाँ:
(1 * 10 ^ 09) यदि आप चाहें तो 1000000000 से बदला जा सकता है
"scale=3"यह एक दुर्लभ सेटिंग है bcजो आपको जो करना है करने के लिए मजबूर करता है। और भी बहुत कुछ हैं!
मैंने केवल Win7 / MinGW पर यह परीक्षण किया है ... मेरे पास हाथ करने के लिए एक उचित * निक्स बॉक्स नहीं है।
time <script>
यहां बताया गया है कि विभाजन के बिना मिलीसेकंड में समय कैसे प्राप्त करें। शायद यह तेज है ...
# test=`date +%s%N`
# testnum=${#test}
# echo ${test:0:$testnum-6}
1297327781715
अपडेट: शुद्ध बैश में एक और विकल्प जो केवल bash 4.2+उसी के साथ काम करता है जो ऊपर है लेकिन printfतारीख प्राप्त करने के लिए उपयोग करें। यह निश्चित रूप से तेज़ होगा क्योंकि कोई भी प्रक्रिया मुख्य से दूर नहीं होती है।
printf -v test '%(%s%N)T' -1
testnum=${#test}
echo ${test:0:$testnum-6}
हालांकि एक और पकड़ यह है कि आपके strftimeकार्यान्वयन का समर्थन करना चाहिए %sऔर %Nजो मेरे परीक्षण मशीन पर ऐसा नहीं है। man strftimeसमर्थित विकल्पों के लिए देखें । सिंटैक्स देखने के man bashलिए भी देखें printf। -1और -2समय के लिए विशेष मूल्य हैं।
strftime(3)का समर्थन नहीं करता %Nतो के लिए कोई रास्ता नहीं printfनैनोसेकंड मुद्रित करने के लिए। मैं Ubuntu 14.04 का उपयोग कर रहा हूं।
dateअधिक विश्वसनीय विकल्प की तरह लगता है।
सबसे सटीक टाइमस्टैम्प हम प्राप्त कर सकते हैं (कम से कम मैक ओएस एक्स के लिए) शायद यह है:
python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")'
1490665305.021699
लेकिन हमें यह ध्यान रखना होगा कि इसे चलाने के लिए लगभग 30 मिलीसेकंड का समय लगता है। हम इसे 2 अंकों के अंश के पैमाने पर काट सकते हैं, और बहुत शुरुआत में समय पढ़ने के औसत ओवरहेड की गणना करते हैं , और फिर माप को हटा देते हैं। यहाँ एक उदाहरण है:
function getTimestamp {
echo `python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")' | cut -b1-13`
}
function getDiff {
echo "$2-$1-$MeasuringCost" | bc
}
prev_a=`getTimestamp`
acc=0
ITERATIONS=30
for i in `seq 1 $ITERATIONS`;do
#echo -n $i
a=`getTimestamp`
#echo -n " $a"
b=`echo "$a-$prev_a" | bc`
prev_a=$a
#echo " diff=$b"
acc=`echo "$acc+$b" | bc`
done
MeasuringCost=`echo "scale=2; $acc/$ITERATIONS" | bc`
echo "average: $MeasuringCost sec"
t1=`getTimestamp`
sleep 2
t2=`getTimestamp`
echo "measured seconds: `getDiff $t1 $t2`"
आप यह कैसे काम करता है यह देखने के लिए इको कमांड को अनइंस्टॉल कर सकते हैं।
इस स्क्रिप्ट के परिणाम आमतौर पर इन 3 परिणामों में से एक हैं:
measured seconds: 1.99
measured seconds: 2.00
measured seconds: 2.01
दिनांक और एक्सपायर का उपयोग करके आप वहां पहुंच सकते हैं
X=$(expr \`date +%H\` \\* 3600 + \`date +%M\` \\* 60 + \`date +%S\`)
echo $X
बस उस पर विस्तार करें जो आप चाहते हैं
मुझे लगता है कि यह युग के बाद से मिलीसेकंड नहीं देता है, लेकिन यह अभी भी कुछ मामलों के जवाब के रूप में उपयोगी हो सकता है, यह सब इस बात पर निर्भर करता है कि आपको वास्तव में इसके लिए क्या चाहिए, 1000 से गुणा करें यदि आपको एक मिलीसेकंड संख्या की आवश्यकता है: डी
सबसे सरल तरीका यह होगा कि आप एक छोटा निष्पादन योग्य (C f.ex. से) बनाएं और इसे स्क्रिप्ट को उपलब्ध कराएं।
dateकई बार चल रही है। कुछ मामलों में, जैसे ही आपकी कमांड लिखी जाती है, रनों के बीच की तारीख या समय बदल सकता है। dateएक बार चलाने और भागों को पार्स करने और अपनी गणना करने के लिए बेहतर है । ऐसा करने के कई तरीकों में से एक होगा t=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"। यह बैश सिंटैक्स का उपयोग करता है क्योंकि प्रश्न टैग बैश है । जैसा कि आप अलाउड करते हैं, आपका उत्तर (और मेरी भिन्नता) केवल वर्तमान दिन के लिए सेकंड देता है अब तक और न कि युग के बाद से और न ही मिली में।
(ऊपर से दोहराएं) date +%NOS X पर काम नहीं करता है, लेकिन आप इसका उपयोग भी कर सकते हैं:
पर्ल (समय की आवश्यकता है :: प्रारूप मॉड्यूल)। शायद उपयोग करने के लिए सबसे अच्छा सीपीएएन मॉड्यूल नहीं है लेकिन काम हो जाता है। समय :: प्रारूप आम तौर पर वितरण के साथ उपलब्ध कराया जाता है।
perl -w -e'use Time::Format; printf STDOUT ("%s.%s\n", time, $time{"mmm"})'
dateइसका उपयोग नहीं किया जा सकता है और कोई भी बैश-केवल कमांड नहीं है जो आवश्यकता का उत्तर दे।
dateनहीं इस्तेमाल किया जा सकता है , तो मैं अपना डाउनवोट हटा दूंगा।
पिछले सभी प्रतिक्रियाओं को एक साथ रखते हुए, जब OSX में
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G31+
आप पसंद कर सकते हैं
microtime() {
python -c 'import time; print time.time()'
}
compute() {
local START=$(microtime)
#$1 is command $2 are args
local END=$(microtime)
DIFF=$(echo "$END - $START" | bc)
echo "$1\t$2\t$DIFF"
}
यदि आप एक सरल शेल अभिकलन अभिकलन चाहते हैं, तो उपरोक्त उत्तर का उपयोग करके यह आसान और पोर्टेबल है:
now() {
python -c 'import datetime; print datetime.datetime.now().strftime("%s.%f")'
}
seismo:~$ x=`now`
seismo:~$ y=`now`
seismo:~$ echo "$y - $x" | bc
5.212514
अल्पाइन लाइनक्स (कई डॉकटर चित्र) और संभवतः अन्य न्यूनतम लिनक्स वातावरण के लिए आप दुरुपयोग कर सकते हैं adjtimex:
adjtimex | awk '/(time.tv_usec):/ { printf("%06d\n", $2) }' | head -c3
adjtimexका उपयोग करने के लिए प्रयोग किया जाता है (और सेट) कर्नेल समय चर। साथ awkआप माइक्रोसेकंड प्राप्त कर सकते हैं, के साथ headआप पहली बार 3 अंक ही उपयोग कर सकते हैं।
मुझे नहीं पता कि यह कमान कितनी विश्वसनीय है।
नोट: बेशर्मी से इस जवाब से चुरा लिया गया