Search code examples
bashunixdateunix-timestamp

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


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.


Solution

  • 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.