我需要一个shell命令或脚本,将Unix时间戳转换为日期。输入可以来自第一个参数,也可以来自stdin,允许以下使用模式:
ts2date 1267619929
and
echo 1267619929 | ts2date
这两个命令都应该输出“Wed Mar 3 13:38:49 2010”。
我需要一个shell命令或脚本,将Unix时间戳转换为日期。输入可以来自第一个参数,也可以来自stdin,允许以下使用模式:
ts2date 1267619929
and
echo 1267619929 | ts2date
这两个命令都应该输出“Wed Mar 3 13:38:49 2010”。
当前回答
我喜欢以前的特殊情况下的解决方案:printf '%(%c)T\n' $timestamp(如果你有Bash>=4.2), date -d @$timestamp(如果你有GNU Coreutils >= 5.3.0), date -r $timestamp(如果你是BSD/MacOS),但我需要一些更可移植的东西,我选择了jq,我到处都有JSON的帮助:
jq 'todate' <<< $timestamp
可以在函数中使用,以获得所需的效果:
ts2date() { [[ -n "$1" ]] && { jq 'todate' <<< $1 ; true;} || jq 'todate' ; }
其他回答
如果你想一次格式化多个时间戳,我写了一个名为datefmt的C util,它在文本流中格式化时间戳:
假设我们有一些包含unix时间戳的日志:
$ cat logs.txt
EVENTS 1638499687 blahblah log1
EVENTS 1638499717 blahblah log2
我们可以将该日志管道到datefmt中,将这些时间戳转换为人类可读的日期:
$ <logs.txt datefmt
EVENTS 2021-12-02 18:48 blahblah log1
EVENTS 2021-12-02 18:48 blahblah log2
当然,你也可以自定义格式:
$ <logs.txt datefmt "DATE:'%m-%d %R'"
EVENTS DATE:'12-02 18:48' blahblah log1
EVENTS DATE:'12-02 18:48' blahblah log2
我已经在NixOS中打包了它,希望它很快就会渗透到其他发行版中,但现在你需要下载tarball并使用make构建它
我在转换日志文件或监控它们时使用这个:
tail -f <log file> | gawk \
'{ printf strftime("%c", $1); for (i=2; i<NF; i++) printf $i " "; print $NF }'
我喜欢以前的特殊情况下的解决方案:printf '%(%c)T\n' $timestamp(如果你有Bash>=4.2), date -d @$timestamp(如果你有GNU Coreutils >= 5.3.0), date -r $timestamp(如果你是BSD/MacOS),但我需要一些更可移植的东西,我选择了jq,我到处都有JSON的帮助:
jq 'todate' <<< $timestamp
可以在函数中使用,以获得所需的效果:
ts2date() { [[ -n "$1" ]] && { jq 'todate' <<< $1 ; true;} || jq 'todate' ; }
我自己写了一个脚本:
#!/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); }'
在PHP中
$unix_time = 1256571985;
echo date("Y-m-d H:i:s",$unix_time)