我需要一个shell命令或脚本,将Unix时间戳转换为日期。输入可以来自第一个参数,也可以来自stdin,允许以下使用模式:

ts2date 1267619929

and

echo 1267619929 | ts2date

这两个命令都应该输出“Wed Mar 3 13:38:49 2010”。


当前回答

在GNU Coreutils >= 5.3.0的系统上,例如Linux,您可以使用:

date -d @1267619929

其他回答

在PHP中

$unix_time = 1256571985;

echo date("Y-m-d H:i:s",$unix_time)

我使用这个跨平台的一行代码:

date -d @1267619929 2>/dev/null || date -r 1267619929

它应该可以在macOS和流行的Linux发行版的现代版本中运行。

我自己写了一个脚本:

#!/bin/bash
LANG=C
if [ -z "$1" ]; then
    if [  "$(tty)" = "not a tty" ]; then
            p=`cat`;
    else
            echo "No timestamp given."
            exit
    fi
else
    p=$1
fi
echo $p | gawk '{ print strftime("%c", $0); }'

我必须在bash历史记录中转换内联的时间戳,以便对我有意义。

也许下面的答案来自于我如何用sed, awk或这样的shell命令的输出替换子字符串?其他读者也会感兴趣。 原始sed内联代码的荣誉归于@Gabriel。

cat ~/.bash_history | sed "s/^#\([0-9]\+\)$/echo -n '#'; date -u --d @\1 '\+\%Y-\%m-\%d \%T'/e" | less
date -r <number>

在Mac OS X上适用。