2

寻找一个 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

4 回答 4

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))
于 2013-09-13T19:21:15.140 回答
0

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

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

如果不是,恐怕您将不得不使用系统调用编写一个 C 程序gettimeofday()。让我们称之为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 时间。但我会把它留在这里,因为它太好了。:-)

于 2013-09-13T19:19:46.123 回答
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。您必须GNU date在 MacPorts 的 coreutil 包中安装它。然后你会得到gdate.

相反,您可以使用它python来执行此操作:

python -c'import time; print "%f" % (time.mktime(time.gmtime())*1000.)'
于 2013-09-13T19:23:13.030 回答
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
于 2014-11-21T10:56:31.293 回答