如何将类似于“19-FEB-12”这样的字符串转换为UNIX时间戳?

26

在UNIX中如何将日期字符串转换为毫秒级时间戳,例如:

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

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

2个回答

46

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

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. 当没有指定时间时,使用当前时间代替午夜时间。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接