How to convert strings like "19-FEB-12" to epoch date in UNIX How to convert strings like "19-FEB-12" to epoch date in UNIX unix unix

How to convert strings like "19-FEB-12" to epoch date in UNIX


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-$THENecho "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 insteadof midnight.


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 ago361.6 days ago1286.6 days ago