क्या मिलीसेकंड में समय पाने के लिए लिनक्स में एक शेल कमांड है?
date -Ins
क्या मिलीसेकंड में समय पाने के लिए लिनक्स में एक शेल कमांड है?
date -Ins
जवाबों:
date +%s%N
सेकंड + वर्तमान नैनोसेकंड की संख्या लौटाता है।
इसलिए, echo $(($(date +%s%N)/1000000))
आपको जो चाहिए।
उदाहरण:
$ echo $(($(date +%s%N)/1000000))
1535546718115
date +%s
युग के बाद से कुछ सेकंड की संख्या, यदि यह उपयोगी है।
%N
समर्थित नहीं हैdate
date +%s%3N
तेज है (@ माइकल-डिफोर्ट के उत्तर के आधार पर)
coreutils
MacPorts या Homebrew के उपयोग के हिस्से के रूप में GNU संस्करण स्थापित करने की आवश्यकता है - फिर gdate
कमांड का उपयोग करें । इस प्रश्न को देखें: stackoverflow.com/questions/9804966/…
date +"%T.%N"
नैनोसेकंड के साथ वर्तमान समय देता है।
06:46:41.431857000
date +"%T.%6N"
नैनोसेकंड के साथ वर्तमान समय को पहले 6 अंकों के साथ देता है, जो कि माइक्रोसेकंड है।
06:47:07.183172
date +"%T.%3N"
नैनोसेकंड के साथ वर्तमान समय को पहले 3 अंकों के लिए देता है, जो कि मिलीसेकंड है।
06:47:42.773
सामान्य तौर पर, date
कमांड के प्रारूप के प्रत्येक क्षेत्र को एक वैकल्पिक फ़ील्ड चौड़ाई दी जा सकती है।
%xN
: क्षेत्र की चौड़ाई के लिए अच्छा है!
नैनो 10 and9 और मिली 10 −3 है । इसलिए, हम मिलीसेकंड प्राप्त करने के लिए नैनोसेकंड के तीन पहले पात्रों का उपयोग कर सकते हैं:
date +%s%3N
से man date
:
% N नैनोसेकंड (000000000..999999999)
1970-01-01 00:00:00 UTC के बाद से % s सेकंड
स्रोत: सर्वर फाल्ट कैसे मैं बैश में मिलीसेकंड में वर्तमान यूनिक्स समय प्राप्त कर सकता हूं? ।
ओएस एक्स पर, जहां ध्वज का date
समर्थन नहीं करता है %N
, मैं होमब्रेcoreutils
का उपयोग करके स्थापित करने की सलाह देता हूं । यह आपको एक कमांड को एक्सेस करने देगा जो कि लिनक्स सिस्टम पर व्यवहार करता है।gdate
date
brew install coreutils
अधिक "देशी" अनुभव के लिए, आप इसे हमेशा अपने साथ जोड़ सकते हैं .bash_aliases
:
alias date='gdate'
फिर अमल करें
$ date +%s%N
मिलीसेकंड में समय प्राप्त करने के लिए लिनक्स के लिए किसी तरह पोर्टेबल हैक है:
#!/bin/sh
read up rest </proc/uptime; t1="${up%.*}${up#*.}"
sleep 3 # your command
read up rest </proc/uptime; t2="${up%.*}${up#*.}"
millisec=$(( 10*(t2-t1) ))
echo $millisec
आउटपुट है:
3010
यह एक बहुत ही सस्ता ऑपरेशन है, जो शेल इंटर्नल और procfs के साथ काम करता है।
date
कमांड एक्सट्रीम ओएस एक्स पर मिलि सेकंड प्रदान करता है, इसलिए अजगर से एक उपनाम का इस्तेमाल किया
millis(){ python -c "import time; print(int(time.time()*1000))"; }
या
alias millis='python -c "import time; print(int(time.time()*1000))"'
fork()
एक अलग प्रक्रिया को संपादित कर लेते हैं exec
, तो अपने पाइथन इंटरप्रेटर को एड करें, इसे अपने पुस्तकालयों को लोड करने दें / अन्यथा आरंभ करें, इसका परिणाम लिखें, और बाहर निकलें, यह परिणाम अब सटीक नहीं होगा।
अन्य उत्तर संभवतः अधिकांश मामलों में पर्याप्त हैं, लेकिन मुझे लगा कि मैं अपने दो सेंट जोड़ूंगा क्योंकि मैं एक व्यस्त बॉक्स में एक समस्या में भाग गया था सिस्टम ।
विचाराधीन प्रणाली ने समर्थन नहीं किया %N
प्रारूप विकल्प का और इसमें कोई पायथन या पर्ल दुभाषिया नहीं है।
बहुत सिर खुजाने के बाद, हम (धन्यवाद डेव!) इसके साथ आए:
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
यह सेकंड और माइक्रोसेकंड का आउटपुट निकालता है adjtimex
(सामान्य रूप से सिस्टम क्लॉक के लिए विकल्प सेट करने के लिए उपयोग किया जाता है) उन्हें नई लाइनों के बिना प्रिंट करता है (ताकि वे एक साथ चिपके रहें)। ध्यान दें कि माइक्रोसेकंड फ़ील्ड को शून्य के साथ प्री-पेड किया जाना है, लेकिन यह सेकंड फ़ील्ड को प्रभावित नहीं करता है जो वैसे भी छह अंकों से अधिक है। इससे माइक्रोसेकंड को मिलीसेकंड में परिवर्तित करने के लिए तुच्छ होना चाहिए।
यदि आपको एक अनुगामी नई लाइन की आवश्यकता है (हो सकता है कि यह बेहतर लगे) तो प्रयास करें
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }' && printf "\n"
यह भी ध्यान दें कि इसके लिए adjtimex
और awk
उपलब्ध होने की आवश्यकता है। यदि नहीं तो बिजीबॉक्स के साथ आप उन्हें स्थानीय रूप से इंगित कर सकते हैं:
ln -s /bin/busybox ./adjtimex
ln -s /bin/busybox ./awk
और फिर ऊपर के रूप में कहते हैं
./adjtimex | ./awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
या निश्चित रूप से आप उन्हें अपने में डाल सकते हैं PATH
संपादित करें:
ऊपर मेरे बिजीबॉक्स डिवाइस पर काम किया। उबंटू पर मैंने एक ही चीज़ की कोशिश की और महसूस किया कि adjtimex
इसके विभिन्न संस्करण हैं। उबंटू पर यह दशमलव स्थानों के साथ सेकंड में microseconds (एक अनुगामी नई लाइन सहित) को आउटपुट करने का काम करता है
sudo apt-get install adjtimex
adjtimex -p | awk '/raw time:/ { print $6 }'
मैं हालांकि Ubuntu पर ऐसा नहीं करेगा। मै इस्तेमाल करूंगाdate +%s%N
इसके लिए पर्ल का उपयोग किया जा सकता है, यहां तक कि एआईएक्स जैसे विदेशी प्लेटफार्मों पर भी। उदाहरण:
#!/usr/bin/perl -w
use strict;
use Time::HiRes qw(gettimeofday);
my ($t_sec, $usec) = gettimeofday ();
my $msec= int ($usec/1000);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime ($t_sec);
printf "%04d-%02d-%02d %02d:%02d:%02d %03d\n",
1900+$year, 1+$mon, $mday, $hour, $min, $sec, $msec;
इस तरह एक पायथन स्क्रिप्ट:
import time
cur_time = int(time.time()*1000)
time.time()
6 दशमलव स्थानों पर एक फ्लोट लौटाया, कम से कम macOS पर।
मैं सिर्फ एस्पर के जवाब में जोड़ना चाहता था कि इस काम को करने के लिए मुझे क्या करना होगा:
मैक पर, आपको आवश्यकता होगी brew install coreutils
, इसलिए हम उपयोग कर सकते हैं gdate
। अन्यथा लिनक्स पर, यह सिर्फ है date
। और यह फ़ंक्शन अस्थायी फ़ाइलों या कुछ भी बनाने के लिए बिना समय कमांड की मदद करेगा:
function timeit() {
start=`gdate +%s%N`
bash -c $1
end=`gdate +%s%N`
runtime=$(((end-start)/1000000000.0))
echo " seconds"
}
और आप इसे एक तार के साथ उपयोग कर सकते हैं:
timeit 'tsc --noEmit'
function timeit () { start=$(date +%s%N); $*; end=$(date +%s%N); runtime=$(((end-start)/1000000)); echo "$runtime ms" }
जब आप 4.1 संस्करण से GNU AWK का उपयोग करते हैं, तो आप समय पुस्तकालय लोड कर सकते हैं और कर सकते हैं:
$ awk '@load "time"; BEGIN{printf "%.6f", gettimeofday()}'
यह 1970-01-01T00: 00: 00 के बाद से सेकंड सेकंड में वर्तमान समय को प्रिंट करेगा।
the_time = gettimeofday()
1970-01-01 UTC से एक अस्थायी बिंदु मान के रूप में समाप्त होने वाले सेकंड में समय लौटाएं। यदि इस प्लेटफ़ॉर्म पर समय अनुपलब्ध है, तो वापस लौटें-1
और सेट करेंERRNO
। लौटे समय में उप-सेकंड की सटीकता होनी चाहिए , लेकिन वास्तविक सटीकता प्लेटफ़ॉर्म के आधार पर भिन्न हो सकती है। यदिgettimeofday()
इस प्लेटफ़ॉर्म पर मानक C सिस्टम कॉल उपलब्ध है, तो यह केवल मान लौटाता है। अन्यथा, यदि एमएस-विंडोज पर, यह उपयोग करने की कोशिश करता हैGetSystemTimeAsFileTime()
।स्रोत: GNU awk मैनुअल
लिनक्स सिस्टम पर, मानक सी फ़ंक्शन getimeofday()
माइक्रोसेकंड सटीकता में समय लौटाता है।
समय और समय-क्षेत्र के साथ तारीख दिखाने के लिए
दिनांक + "% d-% m-% Y% T.% N% Z"
आउटपुट: 22-04-2020 18: 01: 35.970289239 IST
date +%s.%N
आपको नैनोसेकंड देगा, क्या आप इसके साथ काम कर सकते हैं?