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