xen*_*ide 249 command-line shell date
如何在 cli 上将纪元时间戳转换为人类可读的格式?我认为有一种方法可以用日期来做到这一点,但语法让我望而却步(欢迎其他方式)。
Gil*_*il' 371
在 *BSD 上:
date -r 1234567890
Run Code Online (Sandbox Code Playgroud)
在 Linux 上(特别是使用 GNU coreutils ?5.3):
date -d @1234567890
Run Code Online (Sandbox Code Playgroud)
使用旧版本的 GNU 日期,您可以计算与 UTC 纪元的相对差异:
date -d '1970-01-01 UTC + 1234567890 seconds'
Run Code Online (Sandbox Code Playgroud)
如果您需要便携性,那您就不走运了。您可以使用 POSIX shell 命令(无需自己计算)行格式化的唯一时间是当前时间。在实践中,Perl 经常可用:
perl -le 'print scalar localtime $ARGV[0]' 1234567890
Run Code Online (Sandbox Code Playgroud)
小智 25
如果您的纪元时间以毫秒而不是秒为单位,请在将其传递给之前删除最后三位数字date -d:
$ date -d @1455086371603
Tue Nov 7 02:46:43 PST 48079 #Incorrect
Run Code Online (Sandbox Code Playgroud)
这给出了不正确的数据。去掉最后三位数字。
$ date -d @1455086371
Tue Feb 9 22:39:31 PST 2016 #Correct after removing the last three digits. You may remove and round off the last digit too.
Run Code Online (Sandbox Code Playgroud)
Iva*_*hau 15
使用 GNU 自定义格式date:
date -d @1234567890 +'%Y-%m-%d %H:%M:%S'
Run Code Online (Sandbox Code Playgroud)
或者使用 GNU awk:
awk 'BEGIN { print strftime("%Y-%m-%d %H:%M:%S", 1234567890); }'
Run Code Online (Sandbox Code Playgroud)
链接的 SO 问题:https : //stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line
Sté*_*las 15
有bash-4.2或以上:
printf '%(%F %T)T\n' 1234567890
Run Code Online (Sandbox Code Playgroud)
(其中,%F %T是在strftime()型格式)
该语法的灵感来自ksh93.
在ksh93然而,参数取为其中各种并且几乎不记录格式支持日期表达式。
对于 Unix 纪元时间,语法ksh93是:
printf '%(%F %T)T\n' '#1234567890'
Run Code Online (Sandbox Code Playgroud)
ksh93但是似乎对时区使用自己的算法并且可能会出错。例如,在英国,1970 年全年都是夏令时,但是:
$ TZ=Europe/London bash -c 'printf "%(%c)T\n" 0'
Thu 01 Jan 1970 01:00:00 BST
$ TZ=Europe/London ksh93 -c 'printf "%(%c)T\n" "#0"'
Thu Jan 1 00:00:00 1970
Run Code Online (Sandbox Code Playgroud)
Ste*_*ski 14
$ echo 1190000000 | perl -pe 's/(\d+)/localtime($1)/e'
Sun Sep 16 20:33:20 2007
Run Code Online (Sandbox Code Playgroud)
这对于那些在日志文件中使用纪元时间的应用程序会派上用场:
$ tail -f /var/log/nagios/nagios.log | perl -pe 's/(\d+)/localtime($1)/e'
[Thu May 13 10:15:46 2010] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;HOSTA;check_raid;0;check_raid.pl: OK (Unit 0 on Controller 0 is OK)
Run Code Online (Sandbox Code Playgroud)
小智 9
我经常使用的两个是:
$ perl -leprint\ scalar\ localtime\ 1234567890
Sat Feb 14 00:31:30 2009
Run Code Online (Sandbox Code Playgroud)
和
$ tclsh
% clock format 1234567890
Sa Feb 14 00:31:30 CET 2009
Run Code Online (Sandbox Code Playgroud)
有了zsh您可以使用strftime内置的:
strftime格式纪元时间
以指定的格式
输出由epochtime表示的日期。
例如
zmodload zsh/datetime
strftime '%A, %d %b %Y' 1234567890
Run Code Online (Sandbox Code Playgroud)
2009 年 2 月 13 日,星期五
还有dateconv来自dateutils:
dateconv -i '%s' -f '%A, %d %b %Y' 1234567890
Run Code Online (Sandbox Code Playgroud)
2009 年 2 月 13 日,星期五
请记住dateutils工具默认为UTC(-z your/timezone如果需要添加)。