在 AIX 中将日期转换为 unix 时间戳

Convert date to unix timestamp in AIX

我有几个日期像当年那样转换:

20151213 20151214

在 AIX 中似乎 date -d 无法识别 -d 选项

date -d 20151213 +%s

所以我无法将动态接收到的特定日期格式转换为 Unix 时间戳。
如何将 AIX 中的这些日期转换为时间戳?

Perl 的 Time::Local module 是您所需要的:

perl -e '
    use Time::Local;
    for $d ("20151213", "20151214") {
        ($year, $month, $day) = $d =~ /(\d{4})(\d{2})(\d{2})/;
        $epoch = timelocal(0,0,0, $day, $month-1, $year-1900);
        print "$d => $epoch\n"
    }
'
20151213 => 1449982800
20151214 => 1450069200

在 shell 脚本中,我会写

epoch() {
    echo "" | perl -MTime::Local -lne '
        ($year, $month, $day) = /(\d{4})(\d{2})(\d{2})/;
        print timelocal(0, 0, 0, $day, $month-1, $year-1900)
    '
}

timestamp=$(epoch 20151213)

您可以使用带有 Time::Piece 模块的 Perl 来简洁地完成此操作

use strict;
use warnings 'all';
use feature 'say';

use Time::Piece;

for ( qw/ 20151213 20151214 / ) {
    my $time = Time::Piece->strptime($_, '%Y%m%d')->epoch;
    say $time;
}

输出

1449964800
1450051200