মিলিসেকেন্ডে সময় পাওয়ার জন্য কমান্ড


286

লিনাক্সে মিলিসেকেন্ডে সময় পাওয়ার জন্য কি শেল কমান্ড রয়েছে?


12
date +%s.%Nআপনি ন্যানোসেকেন্ডস দিতে হবে, আপনি কি এটি দিয়ে কাজ করতে পারেন?
রিক্কেনে

1
@ ব্রিকেন এটি যদিও বহনযোগ্য নয়।
ক্যামিলো মার্টিন

16
তারিখ + "% Y% m% d।% H% M% S% 3N" - সাধারণত আমি ইউনিক্স ব্যাশ স্ক্রিপ্টে অস্থায়ী ফাইলের নাম তৈরি করতে মিলি সেকেন্ড অবধি ফুলডেট এবং অনন্য সময় পেতে এই আদেশটি ব্যবহার করি। যদি আপনার সিস্টেম মিলি সেকেন্ড সহ্য করতে সক্ষম না হয় তবে আপনি যথাক্রমে 3 থেকে 6 এবং 9 ব্যবহার করে মাইক্রো বা ন্যানো সেকেন্ডে যেতে পারেন।
নিতিন মহেশ

চেষ্টা করুনdate -Ins
ডাঃ ব্যক্তি ২ য়

উত্তর:


343

date +%s%N সেকেন্ডের সংখ্যা + বর্তমান ন্যানোসেকেন্ডগুলি প্রদান করে।

সুতরাং, echo $(($(date +%s%N)/1000000))আপনার প্রয়োজন হয়।

উদাহরণ:

$ echo $(($(date +%s%N)/1000000))
1535546718115

date +%s যুগের পর থেকে সেকেন্ডের সংখ্যাটি দেয়, যদি তা কার্যকর হয়।


69
ম্যাক ওএসে কাজ করে না, যেহেতু %Nসমর্থিত নয়date
yegor256

33
প্রশ্ন লিনাক্স কমান্ডের জন্য জিজ্ঞাসা করছে। @ অ্যাল্পারের উত্তর জিএনইউ কোর্টিলসের সাথে ডেট কমান্ডের জন্য দুর্দান্ত কাজ করে । আপনার ওএসএক্সকে জিএনটিইজ করুন: ম্যাক ওএস এক্স
ক্যালিগার

77
date +%s%3Nদ্রুত (@ মাইকেল-ডিফোর্টের উত্তরের ভিত্তিতে)

10
ওএসএক্সে আপনাকে coreutilsম্যাকপোর্টস বা হোমব্রিউ ব্যবহারের অংশ হিসাবে তারিখের GNU সংস্করণ ইনস্টল করতে হবে - তারপরে gdateকমান্ডটি ব্যবহার করুন । এই প্রশ্নটি দেখুন: stackoverflow.com/questions/9804966/…
পিয়েরজ

1
যদিও তারিখ +% s% 3N আরও সহজ বা ভাল বলে মনে হচ্ছে তবে এটি অন্য কোনও অফসেট গণনায় এটি ব্যবহার করার ফলে টাইমস্ট্যাম্পটি 1 মিলিসেকেন্ডে হ্রাস পেয়েছে! তবে এই সমাধানটি অফসেট গণনার সাথে নিখুঁতভাবে কাজ করেছে
আরসিনাক্স

341
  • 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চ্ছিক ক্ষেত্র প্রস্থ দেওয়া যেতে পারে।


32
%xN: মাঠ প্রস্থের জন্য দুর্দান্ত এক!
fduff

1
মিলি সেকেন্ডের জন্য তারিখ + "% Y% m% d।% H% M% S% 3N"।
নিতিন মহেশ

4
আমি অনুমান করি যে এটি একটি উত্তরের উত্তর যা সঠিক উত্তর হিসাবে চিহ্নিত হয়েছে।
kcondezo

74

ন্যানো 10 −9 এবং মিলি 10 −3 । সুতরাং, আমরা মিলিসেকেন্ডগুলি পেতে ন্যানোসেকেন্ডের তিনটি প্রথম অক্ষর ব্যবহার করতে পারি:

date +%s%3N

থেকে man date:

% এন ন্যানোসেকেন্ডস (000000000..999999999)

1970-01-01 00:00:00 ইউটিসি থেকে % s সেকেন্ড

উত্স: সার্ভার ফল্ট এর আমি কীভাবে বর্তমান ইউনিক্স সময়কে বাশনে মিলিসেকেন্ডে পেতে পারি?


আমি অত্যন্ত গর্ববোধ করি যে @ পিটার মর্টেনসেন আমার এক পোস্টে তাঁর দুর্দান্ত এক্টিভ রিডিং করেছেন :) ধন্যবাদ !!
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

46

ওএস এক্সে, যেখানে পতাকাটি dateসমর্থন করে না %N, আমি হোমব্রুcoreutils ব্যবহার করে ইনস্টল করার পরামর্শ দিই । এটি আপনাকে লিনাক্স সিস্টেমের মতো আচরণ করবে এমন একটি কমান্ডের অ্যাক্সেস দেয়।gdatedate

brew install coreutils

আরও "দেশীয়" অভিজ্ঞতার জন্য আপনি সর্বদা এটিতে আপনার যুক্ত করতে পারেন .bash_aliases:

alias date='gdate'

তারপরে মৃত্যুদণ্ড কার্যকর করুন

$ date +%s%N

10

মিলিসেকেন্ডে সময় পাওয়ার জন্য লিনাক্সের জন্য এখানে কোনওভাবে বহনযোগ্য হ্যাক রয়েছে:

#!/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

এটি একটি খুব সস্তা অপারেশন, যা শেল ইন্টার্নাল এবং প্রোফসগুলির সাথে কাজ করে।


1
এখন পর্যন্ত কেবলমাত্র একজন যা শিওন ফি ব্যাসিবক্স ভি ১.২ (.০ (2017-09-27 13:20:28 ইডিটি) মাইক্রোওএস-এ কাজ করেছে - আনন্দের সাথে তিনবার উত্সাহিত করবে!
কাদোইজ

8

date কমান্ড ওএস এক্স-তে মিলি সেকেন্ড সরবরাহ করতে পারে নি তাই পাইথন থেকে একটি উপনাম ব্যবহার করেছে

millis(){  python -c "import time; print(int(time.time()*1000))"; }

অথবা

alias millis='python -c "import time; print(int(time.time()*1000))"'

2
... তবে, আপনি একবার fork()পৃথক প্রক্রিয়া সম্পাদনা করার পরে, execআপনার পাইথন দোভাষীকে সম্পাদনা করুন, এর লাইব্রেরিগুলি লোড করুন / অন্যথায় আরম্ভ করুন, এর ফলাফলটি লিখুন এবং প্রস্থান করুন, ফলাফলটি আর সঠিক হবে না।
চার্লস ডাফি

4

অন্যান্য উত্তরগুলি সম্ভবত বেশিরভাগ ক্ষেত্রেই যথেষ্ট তবে আমি ভেবেছিলাম যে আমি ব্যাসিবক্সে সমস্যা হওয়ায় আমি আমার দুটি সেন্ট যুক্ত করব সিস্টেমে ।

প্রশ্নে থাকা সিস্টেমটি সমর্থন করে না %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


বাহ, দুর্দান্ত বিকল্প! প্রকৃতপক্ষে আপনার কমান্ড কাজ করে, তবে কেন আমার কোনও ধারণা নেই। Awk কমান্ডের জন্য আমি কোথায় একটি ডকুমেন্টেশন পাই ?! অ্যাডটাইম আউটপুট থেকে পছন্দসই তথ্য বের করার জন্য স্ট্রিংটি কীভাবে তৈরি করবেন আপনি কীভাবে জানলেন?
সাতরিয়া

অসাধারণ
ব্যস্তবক্স

1

পার্ল এআইএক্সের মতো বহিরাগত প্ল্যাটফর্মগুলিতেও এর জন্য ব্যবহার করা যেতে পারে। উদাহরণ:

#!/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;

1

পাইথনের স্ক্রিপ্ট এর মতো:

import time
cur_time = int(time.time()*1000)

3
এটি মিলিসেকেন্ডের সংখ্যাটি ফিরিয়ে দেবে না, এটি মিলিসেকেন্ডে প্রকাশিত সেকেন্ডের সংখ্যাটি ফিরিয়ে দেবে। সবকিছুই হবে CO SECONDS000
কিলিয়ান্ক

1
@ কিলিয়ান মায়াংয়ের পাইথন কোডটি মিলিসেকেন্ড সরবরাহ করছে।
jlliagre

@ জেলিয়াগ্রে: তবে প্রকৃত সময় রেজোলিউশন কি 16-17 এমএস (1/60 সেকেন্ড) এর চেয়ে ভাল?
পিটার মর্টেনসেন

হ্যাঁ, পাইথনের time.time()কমপক্ষে ম্যাকোএসে 6 টি দশমিক স্থানে একটি ফ্লোট ফেরত দেয়।
পোরগলজম্প

1

এই জিনিসটি কাজ করতে আমি কী করণীয় তা আল্পারের উত্তরে কেবল যুক্ত করতে চেয়েছি :

ম্যাক এ, আপনার প্রয়োজন হবে 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'

আমি এই সমাধানটি পছন্দ করি তবে আমি মিলিসে আরও আগ্রহী। আমি উবুন্টুতে আমার .bashrc এ এই ফাংশনটি পোর্ট করেছি:function timeit () { start=$(date +%s%N); $*; end=$(date +%s%N); runtime=$(((end-start)/1000000)); echo "$runtime ms" }
উলুয়েভ

1

আপনি যখন ৪.১ সংস্করণ থেকে 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()মাইক্রোসেকেন্ড যথার্থতায় সময় দেয়।


0

সময় এবং সময়-অঞ্চলের সাথে তারিখ প্রদর্শন করতে

তারিখ + "% d-% m-% Y% টি।% N% Z"

আউটপুট: 22-04-2020 18: 01: 35.970289239 IST

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.