Answers:
date +%s
යුගයේ සිට තත්පර ගණන නැවත ලබා දෙනු ඇත .
date +%s%N
තත්පර සහ වත්මන් නැනෝ තත්පර ලබා දෙයි.
date +%s%N | cut -b1-13
යුගයේ සිට මිලි තත්පර ගණනක් ඔබට ලබා දෙනු ඇත - වත්මන් තත්පර සහ වම් නැනෝ තත්පර තුන.
සහ මයිකිබී වෙතින් - echo $(($(date +%s%N)/1000000))
(1000 න් බෙදීමෙන් පමණක් මයික්රෝ තත්පරයට පැමිණේ )
echo $(($(date +%s%N)/1000))
%N
OSX යොස්මයිට් මත වැඩ නොකරයි
ඔබට %3N
වඩාත් වැදගත් ඉලක්කම් 3 ට නැනෝ තත්පර කප්පාදු කිරීමට භාවිතා කළ හැකිය (ඒවා මිලි තත්පර වේ):
$ date +%s%3N
1397392146866
මෙය උදා වන්නේ මගේ කුබුන්ටු 12.04 (නිරවද්ය පැන්ගෝලින්) මත ය.
නමුත් %N
ඔබේ ඉලක්ක පද්ධතිය අනුව ක්රියාත්මක නොවන බව මතක තබා ගන්න. උදා: කාවැද්දූ පද්ධතියක් මත පරීක්ෂා කරන ලදි (බිල්ඩ්රූට් රූට්ෆ්, එච්එෆ් නොවන ARM හරස් මෙවලම් කට්ටලයක් භාවිතයෙන් සම්පාදනය කරන ලදි) එහි නොමැත %N
:
$ date +%s%3N
1397392146%3N
(තවද මගේ (මුල් බැස නැති) ඇන්ඩ්රොයිඩ් ටැබ්ලටයේ නොමැත %N
.)
1397392146%3N
ගැනීමට 1397392146%N
, නමුත් ප්රතිදානය 1397392146%3N
මම ඇත්තටම මගේ ඇන්ඩ්රොයිඩ් ටැබ්ලට් පරිගණකය වන busybox පුවරුවේ දක්නට කැමතියි දේ බව ය. ඔබේ සංස්කරණය පැහැදිලි කළ හැකිද?
date +%s.%3N
මුද්රණ 1510718281.134
.
date +%N
OS X හි ක්රියා නොකරයි, නමුත් ඔබට එකක් භාවිතා කළ හැකිය
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
මගේ විසඳුම හොඳම නොවේ, නමුත් එය මට වැඩ කළේය:
date +%s000
මට අවශ්ය වූයේ 2012-05-05 වැනි දිනයක් මිලි තත්පර බවට පරිවර්තනය කිරීමයි.
මෙම විසඳුම මැකෝස් මත ක්රියා කරයි.
ඔබ Bash ස්ක්රිප්ට් එකක් භාවිතා කර පයිතන් තිබේ නම්, ඔබට මෙම කේතය භාවිතා කළ හැකිය:
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
මිලි තත්පර ලබා ගැනීම සඳහා බාහිර වැඩසටහන් ධාවනය කිරීමට යෝජනා කරන පුද්ගලයින් සඳහා ... එම අනුපාතයට අනුව, ඔබටත් මෙය කළ හැකිය:
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
කාරණය: මෙතැන් සිට පිළිතුරක් ලබා ගැනීමට පෙර, කරුණාකර මතක තබා ගන්න සියලුම වැඩසටහන් එක තත්පරයක් තුළ ක්රියාත්මක නොවන බව. මැනීම!
date
ධාවනය කිරීමට 3 ms ගත වේ.
ඔබගේ ස්ක්රිප්ට් ධාවනය වූ කාලය පෙන්වීමට ඔබ ක්රමයක් සොයන්නේ නම්, පහත දැක්වෙන්නේ (සම්පූර්ණයෙන්ම නිවැරදි නොවේ) ප්රති result ලයක් ලබා දෙනු ඇත:
ඔබේ ස්ක්රිප්ටයේ ආරම්භයට ආසන්නව, පහත සඳහන් දෑ ඇතුළත් කරන්න
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>
අපට ලබා ගත හැකි වඩාත්ම නිවැරදි කාලරාමුව (අවම වශයෙන් මැක් ඕඑස් එක්ස් සඳහා) මෙය විය හැකිය:
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 විධානයන් සීමා කළ හැකිය.
මෙම ස්ක්රිප්ටයේ ප්රති results ල සාමාන්යයෙන් මෙම ප්රති results ල 3 න් එකකි:
measured seconds: 1.99
measured seconds: 2.00
measured seconds: 2.01
පිළිගත් පිළිතුරට වඩා මෙහි විප්ලවීය කිසිවක් එකතු කිරීම නොව, බාෂ් වෙත අලුතින් සිටින ඔබ වෙනුවෙන් එය පහසුවෙන් නැවත භාවිතා කළ හැකිය. මෙම උදාහරණය OS X සහ පැරණි Bash මත ක්රියාත්මක වන අතර එය මට පෞද්ගලිකව අවශ්යතාවයක් විය.
nowInMs() {
echo "$(($(date +'%s * 1000 + %-N / 1000000')))"
}
දැන් ඔබට ධාවනය කළ හැකිය
TIMESTAMP="$(nowInMs)";
බෙදීමකින් තොරව මිලි තත්පර වලින් කාලය ලබා ගන්නේ කෙසේද යන්න මෙන්න. සමහර විට එය වේගවත් ...
# test=`date +%s%N`
# testnum=${#test}
# echo ${test:0:$testnum-6}
1297327781715
යාවත්කාලීන කිරීම: Bash 4.2+ සමඟ පමණක් ක්රියා කරන පිරිසිදු Bash හි තවත් විකල්පයක් ඉහත ආකාරයටම වේ, නමුත් 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
වඩා විශ්වාසදායක විකල්පය මෙන් පෙනේ.
දිනය සහ එක්ස්ප්රස් භාවිතා කිරීමෙන් ඔබට එහි යා හැකිය
X=$(expr \`date +%H\` \\* 3600 + \`date +%M\` \\* 60 + \`date +%S\`)
echo $X
ඔබට අවශ්ය ඕනෑම දෙයක් කිරීමට එය පුළුල් කරන්න
මෙය යුගයේ සිට මිලි තත්පර ලබා නොදෙන බව මට වැටහී ඇත, නමුත් සමහර අවස්ථාවන්ට පිළිතුරක් ලෙස එය තවමත් ප්රයෝජනවත් විය හැකිය, ඒ සියල්ල රඳා පවතින්නේ ඔබට සැබවින්ම අවශ්ය දේ මත ය, ඔබට මිලි තත්පර අංකයක් අවශ්ය නම් 1000 කින් ගුණ කරන්න: D
සරලම ක්රමය වනුයේ කුඩා ක්රියාත්මක කළ හැකි (C f.ex වෙතින්) සහ එය ස්ක්රිප්ටයට ලබා දීමයි.
date
කිහිප වතාවක් ධාවනය වීමේ විභව ගැටලුවක් තිබේ. සමහර අවස්ථාවලදී, ඔබේ විධානය ලියා ඇති පරිදි ලකුණු අතර දිනය හෝ වේලාව වෙනස් විය හැකිය. date
එක් වරක් ධාවනය කර කොටස් විග්රහ කර ඔබේ ගණනය කිරීම වඩා හොඳය . එය කළ හැකි ක්රම කිහිපයකින් එකක් වනු ඇත t=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. මෙම ප්රශ්නය tagged බැවින් බෑෂ් කාරක රීති භාවිතා bash . ඔබ සඳහන් කරන පරිදි, ඔබගේ පිළිතුර (සහ මගේ විචලනය) වර්තමාන දිනය සඳහා තත්පර පමණක් ලබා දෙන අතර එය යුගයේ සිට මිලි වලින් නොවේ.
OS X හි සිටින විට පෙර ප්රතිචාර සියල්ලම එකට තැබීම,
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"
}
(පෙර පිළිතුරු වලින් පුනරාවර්තනය කරන්න) date +%N
OS X හි ක්රියා නොකරයි, නමුත් ඔබට මෙයද භාවිතා කළ හැකිය:
පර්ල් (කාලය අවශ්යයි :: ආකෘති මොඩියුලය). සමහර විට එය භාවිතා කිරීමට හොඳම CPAN මොඩියුලය නොවේ, නමුත් එය කාර්යය ඉටු කරයි. වේලාව :: ආකෘතිය සාමාන්යයෙන් බෙදාහැරීම් සමඟ ලබා ගත හැකිය.
perl -w -e'use Time::Format; printf STDOUT ("%s.%s\n", time, $time{"mmm"})'
date
භාවිතා කළ නොහැකි අතර අවශ්යතාවයට පිළිතුරු සපයන බෑෂ් පමණක් විධාන නොමැත.
date
භාවිතා කළ නොහැක්කේ මන්දැයි ඔබ පැහැදිලි කළහොත් , මම මගේ පහත් අගය ඉවත් කරමි.
ඔබට සරල කවචයක් ඉක්මවා ගිය ගණනය කිරීමක් අවශ්ය නම්, මෙය පහසු සහ අතේ ගෙන යා හැකි ය, ෆ්රෑන්ක් තෝනිග්ගේ පිළිතුර භාවිතා කරමින් :
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
සඳහා ඇල්පයින් ලිනක්ස් (බොහෝ Docker රූප) සහ අනෙකුත් අවම ලිනක්ස් පරිසරය, ඔබ අපචාරයට හැකි adjtimex
:
adjtimex | awk '/(time.tv_usec):/ { printf("%06d\n", $2) }' | head -c3
adjtimex
කර්නල් කාල විචල්යයන් කියවීමට (සහ සැකසීමට) භාවිතා කරයි. සමග awk
ඔබ තත්පර ලබා ගැනීම, සහ සමග හැකි head
, ඔබ විසින් පළමු ඉලක්කම් 3 ක් පමණක් භාවිතා කළ හැකිය.
මෙම විධානය කෙතරම් විශ්වාසදායකදැයි මා දන්නේ නැත.
සටහන: මෙම පිළිතුරෙන් ලැජ්ජා විරහිතව සොරකම් කර ඇත