উত্তর:
date +%s
যুগের পর থেকে সেকেন্ডের সংখ্যা ফিরে আসবে ।
date +%s%N
সেকেন্ড এবং বর্তমান ন্যানোসেকেন্ডগুলি প্রদান করে।
date +%s%N | cut -b1-13
যুগের পর থেকে আপনাকে মিলিসেকেন্ডের সংখ্যাটি দেবে - বর্তমান সেকেন্ডের সাথে ন্যানোসেকেন্ডের বাম তিনটি।
এবং মাইকিবি থেকে - echo $(($(date +%s%N)/1000000))
(1000 দ্বারা বিভাজন কেবল মাইক্রোসেকেন্ডগুলিতে নিয়ে আসে)
echo $(($(date +%s%N)/1000))
আপনি খুব সহজেই %3N
ন্যানোসেকেন্ডগুলিকে 3 টি সবচেয়ে উল্লেখযোগ্য সংখ্যায় (যা পরে মিলিসেকেন্ডগুলি) কেটে কাটাতে ব্যবহার করতে পারেন :
$ date +%s%3N
1397392146866
এটি যেমন আমার কুবুন্টু 12.04 এ কাজ করে।
তবে সচেতন থাকুন, %N
এটি আপনার টার্গেট সিস্টেমের উপর নির্ভর করে প্রয়োগ করা যেতে পারে না। উদাহরণস্বরূপ এমবেডেড সিস্টেমে পরীক্ষিত (বিল্ড্রুট রুটফেস, একটি নন-এইচএফ বাহু ক্রস টুলচেইন ব্যবহার করে সংকলিত) কোনও ছিল না %N
:
$ date +%s%3N
1397392146%3N
(এবং আমার (শিকড়বিহীন) অ্যান্ড্রয়েড ট্যাবলেটটিরও নেই %N
)।
1397392146%3N
করা 1397392146%N
, কিন্তু আউটপুট 1397392146%3N
একটা কাজ যা আমি আমার Android ট্যাবলেটের, busybox কনসোলে দেখা চাই যে। আপনি আপনার সম্পাদনা ব্যাখ্যা করতে পারেন?
date +%s.%3N
প্রিন্ট 1510718281.134
।
date +%N
ওএস এক্সে কাজ করে না, তবে আপনি এর মধ্যে একটি ব্যবহার করতে পারেন
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.\\N
date +%s000
node -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 এমএস লাগে।
এই সমাধানটি ম্যাকোজে কাজ করে।
আপনি যদি ব্যাশ স্ক্রিপ্টটি ব্যবহার করে বিবেচনা করেন এবং পাইথন উপলব্ধ থাকে তবে আপনি এই কোডটি ব্যবহার করতে পারেন:
#!/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
আপনাকে যা করতে তা করতে বাধ্য করে। আরও অনেক কিছু আছে!
আমি এটি কেবল উইন 7 / মিনজিডাব্লুয়ে পরীক্ষা করেছি ... আমার কাছে হাতে সঠিক * নিক্স বাক্স নেই।
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
ন্যানোসেকেন্ডগুলি মুদ্রণের জন্য কোনও উপায় নেই । আমি উবুন্টু 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
তারিখ এবং Expr ব্যবহার করে আপনি সেখানে যেতে পারেন
X=$(expr \`date +%H\` \\* 3600 + \`date +%M\` \\* 60 + \`date +%S\`)
echo $X
আপনি যা চান তা করতে এটির উপরে প্রসারিত করুন
আমি বুঝতে পারি যে এটি যুগের পর থেকে মিলিসেকেন্ডগুলি দেয় না, তবে এটি কয়েকটি ক্ষেত্রে একটি উত্তর হিসাবে এখনও কার্যকর হতে পারে, এটি সমস্ত নির্ভর করে আপনার সত্যিকারের জন্য যা প্রয়োজন তার উপর নির্ভর করে, যদি আপনার এক মিলিসেকেন্ড নম্বর প্রয়োজন হয় তবে 1000 দিয়ে গুণ করুন: ডি
সবচেয়ে সহজ উপায় হ'ল একটি ছোট এক্সিকিউটেবল (সি এফ। এক্স। থেকে) তৈরি করা এবং স্ক্রিপ্টটিতে এটি উপলব্ধ করা।
date
একাধিকবার চলার সম্ভাব্য সমস্যা রয়েছে । কিছু ক্ষেত্রে আপনার কমান্ডটি লেখার সাথে সাথে রানের তারিখ বা সময় পরিবর্তন হতে পারে। date
একবার চালানো এবং অংশগুলি পার্স করা এবং আপনার গণনা করা ভাল। এটি করার বেশ কয়েকটি উপায় হ'ল t=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
। প্রশ্নটি ট্যাগ করা বাশ হওয়ায় এটি ব্যাশ সিনট্যাক্স ব্যবহার করে । আপনি ইঙ্গিত হিসাবে, আপনার উত্তর (এবং আমার প্রকরণ) শুধুমাত্র এখন পর্যন্ত সেকেন্ড দেয় এবং না মহাকাশ থেকে এবং মিলিসে নয়।
(উপরে থেকে পুনরাবৃত্তি) date +%N
ওএস এক্সে কাজ করে না, তবে আপনি এটি ব্যবহার করতে পারেন:
পার্ল (সময় :: ফর্ম্যাট মডিউল প্রয়োজন)। সম্ভবত ব্যবহারের জন্য সেরা সিপিএএন মডিউল নয় তবে কাজটি সম্পন্ন করে। সময় :: ফর্ম্যাট সাধারণত বিতরণ দিয়ে উপলব্ধ করা হয়।
perl -w -e'use Time::Format; printf STDOUT ("%s.%s\n", time, $time{"mmm"})'
date
ব্যবহার করা যাবে না এবং এমন কোনও বাশ-কমান্ড নেই যা প্রয়োজনের উত্তর দেয়।
date
ব্যবহার করা যাচ্ছে না তা যদি আপনি পরিষ্কার করে থাকেন তবে আমি আমার ডাউনটোটটি সরিয়ে ফেলব।
ওএসএক্স থাকাকালীন সমস্ত পূর্ববর্তী প্রতিক্রিয়াগুলি একসাথে রেখে
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 সংখ্যার শুধুমাত্র ব্যবহার করতে পারেন।
এই আদেশটি কতটা নির্ভরযোগ্য তা আমার কোনও ধারণা নেই।
দ্রষ্টব্য: এই উত্তরটি থেকে নির্লজ্জভাবে চুরি হয়েছে