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

后端 未结 2 647
天命终不由人
天命终不由人 2020-12-15 17:57

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 c

相关标签:
2条回答
  • 2020-12-15 18:19

    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
    
    0 讨论(0)
  • 2020-12-15 18:30

    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.
    0 讨论(0)
提交回复
热议问题