如何在perl中将日期格式设置为“ 2018-10-29 11:49:33”

时间:2018-12-13 06:12:57

标签: perl

我必须将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

先谢谢了。

2 个答案:

答案 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");