我需要我的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等来完成这个任务?
u2nhd7ah1#
date -d "$date" +%s
例如,
$ date='2016 05 03 16:00' date -d "$date" +%s 1462248000
没有办法指定传递给-d的日期的格式,但也没有理由这样做。date使用启发式方法来处理您的日期格式。如果启发式算法不能处理该格式,您将无法使用GNU的date。
-d
date
g6ll5ycj2#
我建议您使用Perl,它的核心模块是Time::Piece
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
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
abithluo4#
对于支持%s的date:
%s
date +%s
对于Perl:
perl -e 'print time(),"\n"'
4条答案
按热度按时间u2nhd7ah1#
例如,
没有办法指定传递给
-d
的日期的格式,但也没有理由这样做。date
使用启发式方法来处理您的日期格式。如果启发式算法不能处理该格式,您将无法使用GNU的
date
。g6ll5ycj2#
我建议您使用Perl,它的核心模块是
Time::Piece
iecba09b3#
您可以使用perl将时间转换为EPOCH,但如果格式发生变化,则需要更改一些变量
abithluo4#
对于支持
%s
的date
:对于Perl: