我必须将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
先谢谢了。
答案 0 :(得分:2)
我建议全部使用模块来完成。功能齐全且非常完整的模块是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 acceptable 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
要求中间人的地方。
在某些系统上,有%F
的{{1}}格式说明符。 %Y-%m-$d
可能有一种已定义的格式,在这种情况下,您不必手动对其进行修补,但是我不知道该修补程序。
答案 1 :(得分:0)
您可以使用
use POSIX qw( strftime );
print(strftime("%d-%b-%y %H:%M:%S", localtime($time)), "\n");