it-swarm.cn

如何从命令行获取UNIX时间戳的格式化日期

我有一个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'

我希望能够得到如下输出:

$ TZ=UTC somecommand 1282368345
Sat Aug 21 05:25:45 UTC 2010
63
Umang

在Mac OS X和BSD上:

$ date -r 1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -r 1282368345 +%Y-%m-%d
2010-08-21

使用GNU核心工具(您必须对此信息文件进行挖掘):

$ date -d @1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -d @1282368345 --rfc-3339=date
2010-08-21

使用任一方法,添加-u(标准)选项,或传递TZ=UTC0环境变量以具有UTC日期(TZ=UTC0定义称为UTC与UTC的偏移量为0,而TZ=UTC(没有偏移量)的行为未指定(尽管在大多数系统上,系统定义的时区也称为UTC,与UTC的偏移量为0 ))。

98
user601

这个Perl单行代码可以做到:

$ Perl -e 'print scalar localtime $ARGV[0]' 1282367908
Sat Aug 21 09:18:28 2010
6
AlexD

经过一番谷歌搜索后,我找到了只使用date命令的方法:

$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds"
Sat Aug 21 09:18:28 MSD 2010
6
AlexD

使用Shell内置函数:

  • zsh(4.1.1(2003)及以上):

    _$ zmodload zsh/datetime
    $ TZ=UTC0 strftime %c 1282368345
    Sat 21 Aug 2010 05:25:45 UTC
    _
  • _ksh93_(_ksh93i_(2000)及以上):

    _$ TZ=UTC0 printf '%(%c)T\n' '#1282368345'
    Sat Aug 21 05:25:45 2010
    _
  • bash(4.2(2010年及以上)):

    _$ TZ=UTC0 printf '%(%c)T\n' 1282368345
    Sat 21 Aug 2010 05:25:45 UTC
    _

在所有这些方法中,将_%c_替换为所需的strftime()格式。

5
Stéphane Chazelas

回答一个古老的问题,但是我认为如果其他人对此进行搜索,则可能会有所改善。该Bash函数在Linux和OS X上均可使用。我尚未在任何其他BSD系统上进行测试。将纪元时间作为该函数的参数传递,它将打印RFC-3339时间格式。

epochtorfc3339 ()
{
    RFC3339_FORMAT="+%FT%T:::%z"
    Epoch=$(echo [email protected] | sed -n "s/.*\([0-9]\{10\}\).*/\1/p");
    if date --version >/dev/null 2>/dev/null; then
        # Linux
        date ${RFC3339_FORMAT} -d "1970-01-01 UTC ${Epoch} seconds"
        #date -d @${Epoch} --rfc-3339=seconds
    else
        # OS X/BSD
        date -r ${Epoch} ${RFC3339_FORMAT}
    fi
}
2
Noah Spurrier

在osx上,具有UTC

date -r "1475737200" -u
2
anyone

现代Unix丰富遗产的另一个很好的例子。在大多数BSD变体中,这确实是可能的:

$ TZ=UTC date -r 1282368345
Sat Aug 21 05:25:45 UTC 2010

(顺便说一句,您的示例似乎偏离了一秒钟)

1
codehead