bashshellunixunix-timestamp

Convert Unix timestamp to a date string


Is there a quick, one-liner way to convert a Unix timestamp to a date from the Unix command line?

date might work, except it's rather awkward to specify each element (month, day, year, hour, etc.), and I can't figure out how to get it to work properly. It seems like there might be an easier way — am I missing something?


Solution

  • With date from GNU coreutils you can do:

    date -d "@$TIMESTAMP"
    
    # date -d @0
    Wed Dec 31 19:00:00 EST 1969
    

    (From: BASH: Convert Unix Timestamp to a Date)

    On OS X, use date -r.

    date -r "$TIMESTAMP"
    

    Alternatively, use strftime(). It's not available directly from the shell, but you can access it via gawk. The %c specifier displays the timestamp in a locale-dependent manner.

    echo "$TIMESTAMP" | gawk '{print strftime("%c", $0)}'
    
    # echo 0 | gawk '{print strftime("%c", $0)}'
    Wed 31 Dec 1969 07:00:00 PM EST