প্রশ্ন কিভাবে বর্তমান ইউনিক্স সময় মিলিসেকেন্ড মধ্যে bash মধ্যে পেতে?


আমি মিলিসেকেন্ডে বর্তমান ইউনিক্স সময়টি কীভাবে পেতে পারি (যেমন ইউনিক্স যুগ 1 জানুয়ারী 1970 থেকে মিলিসেকেন্ডের সংখ্যা)?


197
2018-06-14 16:04


উত্স




উত্তর:


এই:

date +%s 

সংখ্যা ফিরে আসবে সেকেন্ড যুগ থেকে।

এই:

date +%s%N

সেকেন্ড এবং বর্তমান nanoseconds ফিরে।

তাই:

date +%s%N | cut -b1-13

যুগ থেকে মিলিসেকেন্ডের সংখ্যা আপনাকে দেবে - বর্তমান সেকেন্ডের পাশাপাশি ন্যানোসেকেন্ডগুলির বাম তিনটি।


এবং থেকে MikeyB - echo $(($(date +%s%N)/1000000)) (1000 দ্বারা বিভক্ত শুধুমাত্র মাইক্রোসেকেন্ড এনেছে)


234
2018-06-14 16:10



আমি আশ্চর্য কত Ms কাট যোগ :-) - Kyle Brandt♦
অথবা যদি আপনি এটি শেলের মধ্যে সবকিছু করতে চান, তবে অতিরিক্ত প্রক্রিয়াটির ব্যয়বহুল ওভারহেড এড়ানো (আসলে, আমরা% s + N এ সংখ্যার সংখ্যাগুলি সংশোধন করার সময় সমস্যাটি এড়িয়ে চলছি): echo $(($(date +%s%N)/1000)) - MikeyB
এটি বিষয়টির নীতি ... যাদু পরিসংখ্যান এবং কোড যা আপনি আসলেই এড়িয়ে চলুন গড়। - MikeyB
আমি মনে করি মূল্যবান যে লোকটি ইউনিক্স, লিনাক্স নয়, এবং বর্তমান শীর্ষ উত্তর (তারিখ +% s% N) আমার AIX সিস্টেমে কাজ করে না। - Pete
@ পটি +1 ওএস এক্স, এবং ফ্রিবিএসডি এর জন্য একই - ocodo


আপনি কেবল ব্যবহার করতে পারেন %3N 3 সর্বাধিক উল্লেখযোগ্য সংখ্যক (যা মিলিসেকেন্ড হয়) থেকে ন্যানোসেকেন্ডগুলি ছিনতাই করতে:

$ date +%s%3N
1397392146866

এটি কাজ করে আমার কুবুন্টু 1২.04।

কিন্তু সচেতন হতে, যে %N আপনার লক্ষ্য সিস্টেমের উপর নির্ভর করে প্রয়োগ করা হতে পারে না। উদাহরণস্বরূপ একটি এমবেডেড সিস্টেমে পরীক্ষা করা হয়েছে (buildroot rootfs, একটি অ-এইচএফ আর্ম ক্রস টুলচাইন ব্যবহার করে সংকলিত) কোন সংখ্যা ছিল না %N:

$ date +%s%3N
1397392146%3N

(এবং আমার (অ rooted) অ্যান্ড্রয়েড ট্যাবলেট নেই %N)।


80
2018-04-13 12:34



@ ওয়ারেন: আমি দেখেছি যে আপনি সম্পাদনা করেছেন এবং পরিবর্তন করেছেন 1397392146%3N থেকে 1397392146%N, কিন্তু আউটপুট 1397392146%3N আমি সত্যিই আমার অ্যান্ড্রয়েড ট্যাবলেট এর ব্যস্তবাক্স কনসোল দেখতে কি যে। আপনি কি আপনার সম্পাদনা ব্যাখ্যা করতে পারেন? - Joe
ইতিহাস থেকে ওয়ারেনের মন্তব্য "3 থেকে 6 তে পরিবর্তিত হয়েছে, 3 টি আপনাকে শুধুমাত্র মাইক্রোসেকেন্ডে নিয়ে যায়"। তাঁর সম্পাদনা পুরোপুরি জঘন্য মনে হচ্ছে; আপনি এটা ফিরে পাকানো উচিত। - bukzor
এটি বিশেষভাবে জিএনইউ কোর্টিলসের বৈশিষ্ট্য। অবশেষে, এখানে এটি গুনুলিবে প্রয়োগ করা হয়েছে: github.com/gagern/gnulib/blob/...। - telotortium
সম্ভবত সেখানে একটি বিন্দু ইন্দ্রিয় তোলে। date +%s.%3N কপি করে প্রিন্ট 1510718281.134। - darksky


date +%N ওএস এক্স এ কাজ করে না, কিন্তু আপনি এক ব্যবহার করতে পারে

  • রুবি: ruby -e 'puts Time.now.to_f'
  • পাইথন: python -c 'import time; print time.time()'
  • Node.js: node -e 'console.log(Date.now())'
  • পিএইচপি: php -r 'echo microtime(TRUE);'
  • ইন্টার্নেটস: wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
  • অথবা মিলিসেকেন্ড জন্য নিকটতম দ্বিতীয় বৃত্তাকার date +%s000

51
2017-09-02 11:16



সম্পূর্ণতা জন্য ... node -e 'console.log(Date.now())' - slf
পিএইচপি ব্যবহার করে: php -r 'echo microtime(TRUE);' - TachyonVortex
নিশ্চিত, আপনি শুধু যারা দোভাষী আপ উষ্ণ আপ জন্য অপেক্ষা করতে হবে। এটি খুব কাজ করে: wget -qO- http://www.timeapi.org/utc/now?\\s.\\N - Camilo Martin
অথবা, যদি আপনি আসলে মিলিসেকেন্ড প্রয়োজন হবে না কিন্তু শুধু সঠিক বিন্যাস: date +%s000 - Lenar Hoyt
apple.stackexchange.com/questions/135742/... ব্রু এর মাধ্যমে OSX এ এটি করার জন্য নির্দেশাবলী আছে coreutils - sameers


শুধু এই আউট নিক্ষেপ, কিন্তু আমি মনে করি বিভাগ সঙ্গে সঠিক সূত্র হবে:

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

8
2017-09-07 21:22





আমার সমাধান ভাল না কিন্তু আমার জন্য কাজ।

date +%s000

আমি 2012-05-05 থেকে মিলিসেকেন্ডের মতো একটি তারিখ রূপান্তর করার প্রয়োজন ছিল।


6
2018-05-09 20:11



আশ্চর্যজনক হ্যাক, lol :) - k06a
আপনি আমার সহকর্মীদের মধ্যে কেউ হতে হবে। - Nakilon


মানুষের জন্য যে বহিরাগত প্রোগ্রাম চলমান সুপারিশ মিল্লিসেকেন্ড ... যে হারে, আপনি এই কাজ করতে পারে:

wget -qO- http://www.timeapi.org/utc/now?\\s.\\N

পয়েন্ট হচ্ছে: এখানে থেকে কোন উত্তর তুলার আগে অনুগ্রহ করে মনে রাখবেন যে সমস্ত প্রোগ্রাম এক সেকেন্ডের মধ্যে চলবে না। পরিমাপ!


6
2018-06-23 13:17



আপনি সময় জন্য স্থানীয় সিস্টেম জিজ্ঞাসা করছি না। আমি অনুমান যা প্রশ্ন করা হয়। আপনি একটি নেটওয়ার্ক সংযোগ উপর নির্ভর করে। - orkoden
@orkoden প্রশ্নটি "1 লা জানুয়ারী 1 লা জানুয়ারী ইউনিক্স যুগ থেকে মিলিসেকেন্ড সংখ্যা" স্পষ্টভাবে জিজ্ঞাসা করে। এছাড়াও, আমি আরো নির্দেশ করছি যে আপনি কীভাবে রুবি বা পাইথন (বা ভ্যাগ্ট) সম্পূর্ণরূপে সময় পেতে না পারলেও দ্রুত কোনও চ্যানেল বা মিলিসেকেন্ডের মাধ্যমে এটি করা হয় না। - Camilo Martin
হ্যাঁ, আমি বুঝলাম যে আপনি খারাপ সমাধানগুলির ত্রুটিগুলিকে হাইলাইট করার জন্য আরও খারাপ সমাধান দিচ্ছেন। আমি বিভিন্ন সমাধান চেষ্টা এবং সময় পরিমাপ। lpaste.net/119499 ফলাফল আকর্ষণীয় ধরনের। এমনকি একটি খুব দ্রুত i7 মেশিনে date চালানোর জন্য 3 এমএস লাগে। - orkoden
@orkoden চমৎকার পরীক্ষা! ওএস কি? এই overhead spawning প্রক্রিয়া সঙ্গে করতে হতে পারে। - Camilo Martin
@ নাকিলন এবং এ কারণে কারও কারও কারও কারোর জন্য কার্ল-সক্ষম সুবিধাগুলির উপর নির্ভর করা উচিত নয়। - Camilo Martin


এই সমাধান ম্যাকোএস কাজ করে।

আপনি যদি bash স্ক্রিপ্টটি ব্যবহার করে বিবেচনা করেন এবং পাইথন উপলব্ধ করে থাকেন তবে আপনি এই কোডটি ব্যবহার করতে পারেন:

#!/bin/bash

python -c 'from time import time; print int(round(time() * 1000))'

3
2018-02-05 14:26



কেন ডাউন ভোট? - Frank Thonig
বিশেষভাবে যুক্তিসঙ্গত বলে মনে হচ্ছে না। নিচের তীরের ইঙ্গিতটি "এই উত্তরটি দরকারী নয়", তবে IMO এটি কার্যকর। সম্ভবত তারা আপনাকে এটি একটি পাইথন স্ক্রিপ্ট তৈরি করতে চেয়েছিলেন। যে সহজ এবং একটি bash কমান্ড হিসাবে জরিমানা কাজ হবে। - Andrew Schulman
ডাউনভোটস সম্পর্কে খুব বেশি চিন্তা করবেন না (এটি আমার নয়) ... বিশেষত যদি তারা বেনামী (কোনটি ভুল হতে পারে তা শিখতে পারে না, তাই না?)। শুধু এটি প্রক্রিয়া করার জন্য আপনি এটি প্রক্রিয়া করতে পারেন ... এখানে আরেকটি +1 রয়েছে ... অনুমান করুন: আপনাকে এখন "ভোট" দেওয়ার অনুমতি দেওয়া হয়েছে, তাই না? - Pierre.Vriens
ডাউনভোট সিস্টেমের সাথে একটি সমস্যার কারণে ঘটেছে বলে মনে হচ্ছে। তারপর থেকে, সিস্টেম দ্বারা আবার সরানো হয়েছে। - Michael Hampton♦


আপনি যদি আপনার স্ক্রিপ্টটি চালানোর সময়টি প্রদর্শনের জন্য কোন উপায় খুঁজছেন, তবে নিম্নলিখিতটি একটি (সম্পূর্ণ সঠিক নয়) ফলাফল সরবরাহ করবে:

আপনার স্ক্রিপ্টটির শুরুতে যতটা সম্ভব আপনি নীচের লিখুন

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" coerces যে একটি বিরল সেটিং হয় bc আপনি কি করতে চান। আরো অনেক কিছু আছে!

আমি শুধুমাত্র Win7 / MinGW এ এটি পরীক্ষা করেছি ... আমার হাতে সঠিক * নিক্স বক্স নেই।


2
2018-02-25 14:48



অথবা আপনি শুধু ব্যবহার করতে পারে time <script> - warren


বিভাগ সম্পাদন ছাড়া মিলিসেকেন্ডে সময় পেতে কিভাবে এখানে। হয়তো এটা দ্রুত ...

# 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 সময় জন্য বিশেষ মান।


2
2018-02-10 09:05



আমার মত মনে হয় strftime(3) সমর্থন করে না %N তাই জন্য কোন উপায় printf nanoseconds মুদ্রণ। আমি উবুন্টু 14.04 ব্যবহার করছি। - haridsv
@haridsv, হ্যাঁ, এটা glibc হয় না। date আরো নির্ভরযোগ্য বিকল্প মত মনে হয়। - akostadinov


আমরা পেতে পারেন সবচেয়ে সঠিক টাইমস্ট্যাম্প (অন্তত ম্যাক ওএস এক্স জন্য) সম্ভবত এই:

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`"

এটি কিভাবে কাজ করে সেটি দেখতে আপনি echo কমান্ডগুলিকে অসম্মতি করতে পারেন।

এই স্ক্রিপ্টের ফলাফলগুলি সাধারণত এই 3 টি ফলাফলের মধ্যে একটি:

measured seconds: 1.99
measured seconds: 2.00
measured seconds: 2.01

2
2018-03-28 02:13





তারিখ এবং expr ব্যবহার করে আপনি সেখানে পেতে পারেন অর্থাত

X=$(expr \`date +%H\` \\* 3600 + \`date +%M\` \\* 60 + \`date +%S\`)
echo $X

শুধু আপনি চান যাই হোক না কেন এটি প্রসারিত

আমি বুঝতে পারছি যে এই যুগ থেকে মিলিসেকেন্ডগুলি দেয় না, তবে এটি কিছু ক্ষেত্রেই উত্তর হিসাবে কার্যকর হতে পারে, এটি আসলেই আপনার প্রয়োজনীয়তার উপর নির্ভর করে, যদি আপনি মিলিসেকেন্ড নম্বরের প্রয়োজন হয় তবে 1000 দ্বারা গুণিত করুন: D

সহজতম উপায়টি একটি ছোট এক্সিকিউটেবল (সি f.ex. থেকে) তৈরি করতে এবং স্ক্রিপ্টে এটি উপলব্ধ করা হবে।


1
2017-11-25 15:06



চলমান একটি সম্ভাব্য সমস্যা আছে date একাধিক বার. কিছু ক্ষেত্রে, আপনার কমান্ড লিখিত হিসাবে রানগুলির মধ্যে তারিখ বা সময় পরিবর্তিত হতে পারে। এটা চালানোর জন্য ভাল date একবার এবং অংশ বিশদ এবং আপনার গণনা করবেন। যে বিভিন্ন উপায় এক হতে হবে t=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"। প্রশ্ন ট্যাগ করা হয়, কারণ এই ব্যাশ সিনট্যাক্স ব্যবহার করে সজোরে আঘাত। আপনি যেহেতু, আপনার উত্তর (এবং আমার বৈচিত্র) শুধুমাত্র বর্তমান দিনের জন্য সেকেন্ড দেয় এবং Epoch এবং মিলি মধ্যে না শুধুমাত্র। - Dennis Williamson