RSS日期在Bash到epoch

时间:2013-09-13 18:53:11

标签: macos bash time type-conversion

寻找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"

4 个答案:

答案 0 :(得分:1)

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))

答案 1 :(得分:0)

date命令以[s]分辨率为您提供时间。如果你的分辨率合适,只需追加3个零。

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:

make gettimeofday

然后:

./gettimeofday

再想一想,我的小程序完全没用,因为你想将给定日期转换为Unix时间。但是我会留在这里,因为它太棒了。 : - )

答案 2 :(得分:0)

您可以使用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.)'

答案 3 :(得分:0)

如果您在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