25

In UNIX how to convert to epoch milliseconds date strings like:

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

I need this to compare these dates with the current time on the server.

A. Wilson
  • 8,534
  • 1
  • 26
  • 39
hellish
  • 411
  • 2
  • 6
  • 11

2 Answers2

45

To convert a date to seconds since the epoch:

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

Current epoch:

date +%s

So, since your dates are in the past:

NOW=`date +%s`
THEN=`date --date="19-FEB-12" +%s`

let DIFF=$NOW-$THEN
echo "The difference is: $DIFF"

Using BSD's date command, you would need

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

Differences from GNU date:

  1. -j prevents date from trying to set the clock
  2. The input format must be explicitly set with -f
  3. The input date is a regular argument, not an option (viz. -d)
  4. When no time is specified with the date, use the current time instead of midnight.
chepner
  • 497,756
  • 71
  • 530
  • 681
Anew
  • 5,175
  • 1
  • 24
  • 36
1

Here's one way using GNU awk. To run:

awk -f script.awk file

Contents of 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)
}

Results:

358.6 days ago
361.6 days ago
1286.6 days ago
Steve
  • 51,466
  • 13
  • 89
  • 103