簡體   English   中英

Bash中的RSS日期到時代

[英]RSS Date in Bash to epoch

尋找bash行以RSS日期格式(例如"Fri, 13 Sep 2013 17:16:45 GMT"並將其轉換為毫秒嗎?

我嘗試了以下方法,它們不會在幾毫秒內產生。 我正在運行Mac OS X Snow Leopard 10.6.8。

  524  date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT"
  525  date +%s -d "Fri 13 Sep 2013 17:16:45 GMT"
  526  date +%s -d "Fri 13 Sep 2013 17:16:45"
  527  date +%s -f "Fri, 13 Sep 2013 17:16:45 GMT"
  528  date +%s -f "Fri, 13 Sep 2013 17:16:45 GMT"
  514  date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT"
  515  date +%s -d "Fri, 13 Sep 2013 17:16:45"
  516  date +%s -ud "Fri, 13 Sep 2013 17:16:45 GMT"
  517  date +%s -ud "Fri, 13 Sep 2013 17:16:45"
  512  date -d "Fri, 13 Sep 2013 17:16:45 GMT" "+%s"

RSS日期是否包含小數秒?

如果沒有,請使用BSD日期(例如Mac OS X):

echo $(date -j -f "%a, %d %b %Y %H:%M:%S" "Fri, 13 Sep 2013 17:16:45" +%s)000

或者,根據Mac OS X的聯機幫助頁:

echo $(date -j -f "%a, %d %b %Y %H:%M:%S %Z" "Fri, 13 Sep 2013 17:16:45 GMT" +%s)000

如果您有GNU日期,則以下更簡單的表達式將起作用:

echo $(date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT")000

或者,您可以使用它,它將在原始時間字符串中使用小數秒:

echo $(($(date +%s%N -d "Fri, 13 Sep 2013 17:16:45.126 GMT")/1000000))

date命令以[s]分辨率為您提供時間。 如果該分辨率適合您,只需附加三個零即可。

date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT" | sed 's/..*/&000/'

如果不是這樣,恐怕您必須使用系統調用gettimeofday()編寫一個C程序。 我們稱之為gettimeofday.c

#include <sys/time.h>                                
#include <stdio.h>                                   
int main(void)                                       
{                                                    
        struct timeval t;                            
        gettimeofday(&t, NULL);                      
        printf("%d%d\n", t.tv_sec, t.tv_usec / 1000);
        return 0;                                    
}                                                    

要編譯它,您需要gcc並進行以下操作:

make gettimeofday

接着:

./gettimeofday

再三考慮,我的小程序完全沒用,因為您要將給定的日期轉換為Unix時間。 但我會把它留在這里,因為它真好。 :-)

您可以使用awk在輸出末尾添加三個零,以毫秒為單位。

date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT" | awk '{print $0"000"}'

或使用sed執行相同的操作:

date +%s -d "Fri, 13 Sep 2013 17:16:45 GMT" | sed -e "s|.*|&000|g"

以上在Mac OS X Lion中不起作用。 您必須安裝MacPorts的coreutil軟件包中的GNU date 然后,您將獲得gdate

相反,您可以使用python來執行此操作:

python -c'import time; print "%f" % (time.mktime(time.gmtime())*1000.)'

如果您獲得date: illegal time format在Mac OS X上出現date: illegal time format錯誤消息,請嘗試使用LANG=C date

- echo $(date -j -f "%a, %d %b %Y %H:%M:%S %Z" "Fri, 13 Sep 2013 17:16:45 GMT" +%s)000  #  date: illegal time format
+ echo $(LANG=C date -j -f "%a, %d %b %Y %H:%M:%S %Z" "Fri, 13 Sep 2013 17:16:45 GMT" +%s)000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM