Date

如何以毫秒為單位設置目前的 Unix 時間?

  • August 19, 2021

可能的解決方案

date --set="2011-12-07 01:20:15.962"  && date --rfc-3339=ns

原始問題

我可以像這樣以毫秒為單位獲取日期:

date +"%S.%N"
date --rfc-3339=ns

根據man date我希望能夠像這樣設置它:

date --set=%s.%N +`date +"%S.%N"`
date --set="%s.%N" "+1323217126.085882000"

根據我的Google搜尋,我希望能夠像這樣設置日期(與上述相反):

date +%s.%N -s `date +"%S.%N"`
date +"%s.%N" -s "1323217126.085882000"

都不工作。有人能幫我解決這個問題嗎?

PS 不,我不需要納秒級解析度。是的,我知道 bash 執行需要幾毫秒。我真正需要的是亞秒級解析度,10 分之一秒就足夠了。

這是一個解決方案(Linux,不是 Unix):

date --set="2011-12-07 01:20:15.962"  && date --rfc-3339=ns

注意延遲:

CURTIME=`date --rfc-3339=ns`
date --set="${CURTIME}"    
NEWTIME=`date --rfc-3339=ns`
echo ${CURTIME}
echo ${NEWTIME}

2011-12-07 01:48:54.687216122+00:00
2011-12-07 01:48:54.720541318+00:00

您會注意到,引入了整毫秒的延遲。這是由於初始化記憶體和載入date二進製文件需要時間。這適用於所有 shell 和execinsert-higher-level-language-here

但是,如果您只需要 10 分之一秒範圍內的亞秒級解析度,這在許多情況下就足夠了。

引用自:https://serverfault.com/questions/338377