如何在UNIX中将“19-FEB-12”这样的string转换为纪元date

在UNIX中如何将时间毫秒数转换为datestring如下:

19-FEB-12 16-FEB-12 05-AUG-09 

我需要这个比较这些date与服务器上的当前时间。

从时代开始,将日期转换为秒数:

 date --date="19-FEB-12" +%s 

当前时代:

 date +%s 

所以,由于你的日期是过去的:

 NOW=`date +%s` THEN=`date --date="19-FEB-12" +%s` let DIFF=$NOW-$THEN echo "The difference is: $DIFF" 

使用BSD的date命令,你需要

 $ date -j -f "%d-%B-%y" 19-FEB-12 +%s 

与GNU的区别date

  1. -j防止date尝试设置时钟
  2. 输入格式必须用-f明确设置
  3. 输入日期是一个常规的参数,而不是一个选项(即-d
  4. 如果没有指定日期的时间,请使用当前时间而不是午夜。

这是使用GNU awk的一种方法。 跑步:

 awk -f script.awk file 

script.awk内容:

 BEGIN { n = systime() FS="-" } { t = mktime(sprintf("%d %d %d %d %d %d", "20" $3, convert($2), $1, 0, 0, 0)) printf "%.1f days ago\n", (n - t) / 60 / 60 / 24 } function convert(m) { return(((index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC", m) - 1) / 3) + 1) } 

结果:

 358.6 days ago 361.6 days ago 1286.6 days ago