我有一个 UNIX 时间戳,我想获得date与该时间戳对应的格式化日期(如 的输出)。
我到目前为止的尝试:
$ date +%s
1282367908
$ date -d 1282367908
date: invalid date `1282367908'
$ date -d +1282367908
date: invalid date `+1282367908'
$ date +%s -d +1282367908
date: invalid date `+1282367908'
Run Code Online (Sandbox Code Playgroud)
我希望能够获得如下输出:
$ TZ=UTC somecommand 1282368345
Sat Aug 21 05:25:45 UTC 2010
Run Code Online (Sandbox Code Playgroud)
小智 125
在 Mac OS X 和 BSD 上:
$ date -r 1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -r 1282368345 +%Y-%m-%d
2010-08-21
Run Code Online (Sandbox Code Playgroud)
使用 GNU 核心工具(您必须为此挖掘信息文件):
$ date -d @1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -d @1282368345 --rfc-3339=date
2010-08-21
Run Code Online (Sandbox Code Playgroud)
使用任一-u选项,添加(标准)选项,或传递TZ=UTC0环境变量以获取 UTC 日期(TZ=UTC0 定义UTC从 UTC 偏移 0调用的时区,而TZ=UTC(无偏移)的行为未指定(尽管在大多数系统上会指系统定义的时区也UTC使用 UTC 的偏移量 0调用))。
这个 perl one-liner 可以做到:
$ perl -e 'print scalar localtime $ARGV[0]' 1282367908
Sat Aug 21 09:18:28 2010
Run Code Online (Sandbox Code Playgroud)
经过一番谷歌搜索后,我找到了date只使用命令的方法:
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds"
Sat Aug 21 09:18:28 MSD 2010
Run Code Online (Sandbox Code Playgroud)
使用 shell 内置函数:
zsh (4.1.1(2003)及以上):
$ zmodload zsh/datetime
$ TZ=UTC0 strftime %c 1282368345
Sat 21 Aug 2010 05:25:45 UTC
Run Code Online (Sandbox Code Playgroud)ksh93(ksh93i(2000)及以上):
$ TZ=UTC0 printf '%(%c)T\n' '#1282368345'
Sat Aug 21 05:25:45 2010
Run Code Online (Sandbox Code Playgroud)bash (4.2(2010)及以上):
$ TZ=UTC0 printf '%(%c)T\n' 1282368345
Sat 21 Aug 2010 05:25:45 UTC
Run Code Online (Sandbox Code Playgroud)在所有这些中,替换%c为strftime()您想要的格式。