如何在UNIX中将“19-FEB-12”等字符串转换为纪元日期

时间:2013-02-11 03:45:17

标签: bash unix date unix-timestamp

在UNIX中如何转换为纪元毫秒的日期字符串,如:

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

我需要将这些日期与服务器上的当前时间进行比较。

2 个答案:

答案 0 :(得分:44)

将日期转换为自纪元以来的秒数:

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. 明确设置输入格式
  4. 输入日期是常规参数,而不是选项(即-d
  5. 如果没有指定日期时间,请改用当前时间 午夜。

答案 1 :(得分:1)

这是使用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