Answers:
在* BSD上:
date -r 1234567890
在Linux上(尤其是GNU coreutils≥5.3):
date -d @1234567890
使用旧版本的GNU date,您可以计算与UTC时期的相对差异:
date -d '1970-01-01 UTC + 1234567890 seconds'
如果您需要可移植性,那您就不走运了。您只能使用POSIX shell命令(无需自己进行计算)进行格式化的时间就是当前时间。实际上,通常可以使用Perl:
perl -le 'print scalar localtime $ARGV[0]' 1234567890
@
意思date -d @1234567890
?man date
没有提到这个...
$ echo 1190000000 | perl -pe 's/(\d+)/localtime($1)/e'
Sun Sep 16 20:33:20 2007
对于那些在日志文件中使用纪元时间的应用程序,这可能会派上用场:
$ 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)
使用GNU的自定义格式date
:
date -d @1234567890 +'%Y-%m-%d %H:%M:%S'
或者使用GNU awk
:
awk 'BEGIN { print strftime("%Y-%m-%d %H:%M:%S", 1234567890); }'
链接的SO问题:https : //stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line
具有bash-4.2
或以上:
printf '%(%F %T)T\n' 1234567890
(其中,%F %T
是在strftime()
型格式)
该语法的灵感来自ksh93
。
在ksh93
然而,参数取为其中各种并且几乎不记录格式支持日期表达式。
在Unix时代,语法ksh93
为:
printf '%(%F %T)T\n' '#1234567890'
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
如果您的纪元时间是毫秒而不是秒,请先删除最后三位数字,然后再传递给date -d
:
$ date -d @1455086371603
Tue Nov 7 02:46:43 PST 48079 #Incorrect
这会提供错误的数据。删除最后三位数字。
$ 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.
您还可以使用一些C程序以shell可以直接解析的格式打印日期时间
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(int argc, char * argv[]) {
if (argc==1) {
return 1;
}
struct tm input_tm;
char * formatStr = "YEAR=%Y\nMON=%m\nDAY=%d\nHOUR=%H\nMIN=%M\nSEC=%S";
size_t formatSize = strlen(formatStr) + 2;
char * output = (char *)malloc(sizeof(char)*formatSize);
strptime(argv[1],"%s",&input_tm);
strftime(output, formatSize, formatStr, &input_tm);
printf("%s\n",output);
free(output);
return 0;
}
用法:
#compile
clang -o epoch2datetime main.c
#invoke
eval `./epoch2datetime 1450196411`
echo $YEAR $MON $DAY $HOUR $MIN $SEC
#output
#2015 12 16 00 20 11
没有一点node.js不会是一个真正的解决方案:
epoch2date(){
node -p "new Date($1)"
}
补充一点~/.bash_aliases
,并确保其来源在~/.bashrc
与. ~/.bash_aliases
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
要在系统上获取节点,请转至http://nvm.sh并运行curl命令。它将安装节点版本管理器(nvm),使您可以切换节点的版本。
只需输入nvm ls-remote
并选择一个版本即可nvm install <version>
。
有一种更简单的方法可以做到这一点:(([[System.DateTimeOffset] :: FromUnixTimeMilliSeconds($ unixtime))。DateTime).ToString(“ s”)