【问题标题】:Convert date to unix timestamp in AIX [duplicate]在AIX中将日期转换为unix时间戳[重复]
【发布时间】:2016-03-19 22:25:12
【问题描述】:

我有几个日期可以转换为当年的月份和日期:

20151213 20151214

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

date -d 20151213 +%s

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

【问题讨论】:

  • 您是在 Perl 中寻找答案,还是在 shell 中寻找任何可以使用的东西?
  • 我发现 perl 将时间戳转换为日期,所以我想有一种可能的方法来扭转这个过程,只是不知道该怎么做......perl -MPOSIX=strftime -e 'print strftime("%Y-%m-%d %T", localtime($ARGV[0])), "\n"' 1381260225
  • Time::Piecestrptime,它会起作用的。

标签: perl unix awk aix


【解决方案1】:

您可以使用 Perl 和 Time::Piece 模块来简洁地做到这一点

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

【讨论】:

    【解决方案2】:

    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 "$1" | 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)
    

    【讨论】:

    • perl -MPOSIX=strftime -e 'for $i ("20151213", "20151214") { ($year, $month, $day) = $i =~ /(\d{4})(\d{2})(\d{2})/; print strftime("%s\n", 0, 0, 0, $day, $month-1, $year-1900) }'
    • @CorexCain:如果您认为自己有解决方案,那么您应该将其作为一个解决方案发布。特别是不要在 cmets 中发布代码,如果你可以避免它,因为它不可读
    • @glennjackman:转换时间戳时最好使用UTC。您的程序根据运行位置产生不同的结果是没有帮助的
    • 好的,我们可以使用timegm 函数代替timelocal,我们得到的时间戳与您的解决方案相同。
    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2020-10-19
    • 2020-12-23
    相关资源
    最近更新 更多