我需要一个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”。
当前回答
我自己写了一个脚本:
#!/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)
例如,你可以使用GNU日期,
$ sec=1267619929
$ date -d "UTC 1970-01-01 $sec secs"
or
$ date -ud @1267619929
我使用这个跨平台的一行代码:
date -d @1267619929 2>/dev/null || date -r 1267619929
它应该可以在macOS和流行的Linux发行版的现代版本中运行。
在OSX或BSD中,有一个等效的-r标志,它显然接受unix时间戳。下面是一个运行date四次的示例:一次是第一次约会,以显示它是什么;一个用于转换为使用%s的Unix时间戳,最后一个使用-r将%s提供的内容转换回字符串。
$ date; date +%s; date -r `date +%s`
Tue Oct 24 16:27:42 CDT 2017
1508880462
Tue Oct 24 16:27:42 CDT 2017
至少在我的机器上还能用。
$ uname -a
Darwin XXX-XXXXXXXX 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64
如果你想一次格式化多个时间戳,我写了一个名为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构建它