perl 使用格式字符串将日期转换为纪元

t40tm48m  于 2022-11-15  发布在  Perl
关注(0)|答案(4)|浏览(178)

我需要我的bash脚本使用FORMAT字符串将字符串转换为秒(从纪元开始),其中日期和格式字符串都由用户提供。似乎可以在BSD版本的 date 中完成,如下所示:

date -j -f "$format" "$date" +%s //format can be anything, e.g. "%Y %m %d %H:%M"

但是我使用Ubuntu。有没有什么方法可以使用bash/awk/perl等来完成这个任务?

u2nhd7ah

u2nhd7ah1#

date -d "$date" +%s

例如,

$ date='2016 05 03 16:00' date -d "$date" +%s
1462248000

没有办法指定传递给-d的日期的格式,但也没有理由这样做。date使用启发式方法来处理您的日期格式。
如果启发式算法不能处理该格式,您将无法使用GNU的date

g6ll5ycj

g6ll5ycj2#

我建议您使用Perl,它的核心模块是Time::Piece

$ perl -MTime::Piece -E 'say Time::Piece->strptime(@ARGV)->epoch' 'Dec 25 2015 06:05:04' '%b %d %Y %H:%M:%S'
1451023504
iecba09b

iecba09b3#

您可以使用perl将时间转换为EPOCH,但如果格式发生变化,则需要更改一些变量

perl -MTime::Local -e '%mon=(Jan=>0,Feb=>1,Mar=>2,Apr=>3,May=>4,Jun=>5,Jul=>6,Aug=>7,Sep=>8,Oct=>9,Nov=>10,Dec=>11);$date=join("\ ",@ARGV);print timelocal($5,$4,$3,$2,$mon{$1},$6),"\n" if($date=~/\w{3}\s+(\S{3})\s+(\d+)\s(\d+):(\d+):(\d+)\s(\d+)/)' Sun Sep 25 10:29:10 2022
abithluo

abithluo4#

对于支持%sdate

date +%s

对于Perl:

perl -e 'print time(),"\n"'

相关问题