我必须将 GMT 日期转换为区域特定日期,格式如“YYYY-MM-DD H:M:S”。 开发的代码是:-
use Time::Local;
($year,$mon,$day) = split /\-/, $ARGV[0];
($hrs,$min,$sec ) = split /:/, $ARGV[1];
$time = timegm( $sec, $min, $hrs, $day, $mon-1, $year-1900);
print scalar localtime($time), "\n";
但是当我像这样运行它时:-
$ perl testDateGMTToLocal.pl 2018-10-29 11:49:33
它给出了在本地时区转换的o/p:-
Mon Oct 29 07:49:33 2018
但我想要以下格式的 O/P
29-OCT-18 07:49:33
提前致谢。
最佳答案
我建议使用模块来完成这一切。全能且非常完整的模块是 DateTime ,对于这项工作,您还需要 DateTime::Format::Strptime .
另一个选择是更简单且更小的核心模块 Time::Piece
use warnings;
use strict;
use feature 'say';
use Time::Piece;
die "Usage $0 YYYY-MM-DD H:M:S" if @ARGV != 2;
my $time = join ' ', @ARGV;
my $tp = Time::Piece->strptime($time, "%Y-%m-%d %T");
my $local = localtime($tp->epoch);
say $local;
# In the desired format
say join('-', $local->mday, uc $local->month, $local->yy),
' ', $local->hms;
# If "Oct" is ok instead of block capitals for month abbreviation
say $local->strftime("%d-%b-%y %T");
这将通过问题中的调用将 GMT 时间转换为我的计算机上的本地时间
Mon Oct 29 04:09:33 2018 29-OCT-18 04:09:33 29-Oct-18 04:09:33
要求中间一个。
在某些系统上,%Y-%m-$d
有%F
格式说明符。†可能有一个定义的格式为 29-OCT-18
,在这种情况下,您不必手动修补它,但我不知道。
† 或者模块有自己的格式,在这种情况下是可移植的。但从这个意义上来说,当它无法在我的系统上执行 %F
时,我并不清楚错误的根源。
关于perl - 如何将日期格式化为 "2018-10-29 11:49:33",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53755924/