লিনাক্সে মিলিসেকেন্ডে সময় পাওয়ার জন্য কি শেল কমান্ড রয়েছে?
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
ম্যাকপোর্টস বা হোমব্রিউ ব্যবহারের অংশ হিসাবে তারিখের 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
কমান্ডের বিন্যাসের প্রতিটি ক্ষেত্রকে একটি fieldচ্ছিক ক্ষেত্র প্রস্থ দেওয়া যেতে পারে।
%xN
: মাঠ প্রস্থের জন্য দুর্দান্ত এক!
ন্যানো 10 −9 এবং মিলি 10 −3 । সুতরাং, আমরা মিলিসেকেন্ডগুলি পেতে ন্যানোসেকেন্ডের তিনটি প্রথম অক্ষর ব্যবহার করতে পারি:
date +%s%3N
থেকে man date
:
% এন ন্যানোসেকেন্ডস (000000000..999999999)
1970-01-01 00:00:00 ইউটিসি থেকে % 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
এটি একটি খুব সস্তা অপারেশন, যা শেল ইন্টার্নাল এবং প্রোফসগুলির সাথে কাজ করে।
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
এর বিভিন্ন সংস্করণ রয়েছে। উবুন্টুতে এটি মাইক্রোসেকেন্ডগুলিতে দশমিক স্থানের সাথে সেকেন্ডে সময় আউটপুট দেয় (একটি নতুন নতুন লাইনের সহ)
sudo apt-get install adjtimex
adjtimex -p | awk '/raw time:/ { print $6 }'
যদিও আমি উবুন্টুতে এটি করব না। আমি ব্যবহার করব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 টি দশমিক স্থানে একটি ফ্লোট ফেরত দেয়।
এই জিনিসটি কাজ করতে আমি কী করণীয় তা আল্পারের উত্তরে কেবল যুক্ত করতে চেয়েছি :
ম্যাক এ, আপনার প্রয়োজন হবে 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" }
আপনি যখন ৪.১ সংস্করণ থেকে GNU AWK ব্যবহার করেন, আপনি সময় গ্রন্থাগারটি লোড করতে এবং করতে পারেন:
$ awk '@load "time"; BEGIN{printf "%.6f", gettimeofday()}'
এটি বর্তমান সময়কে সেকেন্ডে মুদ্রণ করবে 1970-01-01T00: 00: 00 সাব দ্বিতীয় যথার্থতায়।
the_time = gettimeofday()
1970-01-01 ইউটিসি থেকে ভাসমান-পয়েন্টের মান হিসাবে সেকেন্ডে সময়টি ফিরে আসুন। এই প্ল্যাটফর্মে যদি সময় অনুপলব্ধ থাকে তবে ফিরে এসে-1
সেট করুনERRNO
। ফিরে আসা সময়ের সাব-সেকেন্ড নির্ভুলতা থাকা উচিত , তবে প্ল্যাটফর্মের উপর ভিত্তি করে প্রকৃত নির্ভুলতা আলাদা হতে পারে। যদিgettimeofday()
এই প্ল্যাটফর্মে স্ট্যান্ডার্ড সি সিস্টেম কল উপলব্ধ থাকে তবে তা কেবল মানটি দেয়। অন্যথায়, যদি এমএস-উইন্ডোজ থাকে তবে এটি ব্যবহারের চেষ্টা করেGetSystemTimeAsFileTime()
।উত্স: GNU awk ম্যানুয়াল
লিনাক্স সিস্টেমে, স্ট্যান্ডার্ড সি ফাংশনটি getimeofday()
মাইক্রোসেকেন্ড যথার্থতায় সময় দেয়।
সময় এবং সময়-অঞ্চলের সাথে তারিখ প্রদর্শন করতে
তারিখ + "% d-% m-% Y% টি।% N% Z"
আউটপুট: 22-04-2020 18: 01: 35.970289239 IST
date +%s.%N
আপনি ন্যানোসেকেন্ডস দিতে হবে, আপনি কি এটি দিয়ে কাজ করতে পারেন?