2013-04-23 3 views
3

Есть ли способ получить текущие миллисекунды за полночь в bash? И если есть способ сделать это полностью в bash, насколько хороша или плоха точность этого временного штампа?bash, получить текущее время в миллисекундах с полуночи

+0

Отметьте [этот вопрос] (http://serverfault.com/questions/151109/how-do-i-get-current-unix-time-in-milliseconds-using-bash). – simont

ответ

8

Вы можете получить сегодня в полночь с:

date -d 'today 00:00:00' 

в UNIX топа:

date -d 'today 00:00:00' "+%s" 

Итак, если вы хотите, чтобы получить разницу, сделайте следующее:

midnight=$(date -d 'today 00:00:00' "+%s") 
now=$(date "+%s") 
diff_mills=$((($now - $midnight) * 1000)) 

, как %s указывает секунд, мы должны получить *1000, чтобы получить миллисекунды.


С %N (наносекунд):

midnight=$(date -d 'today 00:00:00' "+%s.%N") 
now=$(date "+%s.%N") 
diff_mills=$(echo "($now - $midnight) * 1000" | bc) 
+3

Чтобы получить более точную точность, вы можете использовать '+% N' для получения наносекунд. – choroba

+0

Несомненно. Просто добавлено для наносекунд. Так как это 10^-9, то в конце мы должны/10^6. – fedorqui

+0

Er, no. '% N' - наносекунды в текущем секунду. Таким образом, абсолютное время будет «% s.% N» ('% N' полезно с нулевым дополнением). – bobbogo

2

Вы также можете использовать мод вместо явной разницы дат. Например, с 1-секундным разрешением:

millis_since_midnight=$[1000 * ((`date "+%s"` - 28800) % 86400)] 

Обратите внимание, что 28800 - это сдвиг PST от UTC в секундах. Этот kludge был полезен для меня в таких системах, как OSX, которые имеют время BSD и, следовательно, не имеют возможности указывать --date 'today 00:00:00'.

Смежные вопросы