如何像“19-FEB-12”字符串转换为UNIX纪元日期(How to convert string

2019-07-19 16:41发布

在UNIX下如何转化为毫秒为单位的日期字符串,如:

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

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

Answer 1:

要将日期转换为秒,因为时代:

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. 当日期没有指定时间,使用当前的时间,而不是午夜。


Answer 2:

下面是使用一种方法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


文章来源: How to convert strings like “19-FEB-12” to epoch date in UNIX