perl - 如何将日期格式化为 "2018-10-29 11:49:33"

标签 perl datetime

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

相关文章:

perl - 使用 ANSI 转义码查询光标位置

mysql - 我认为 curtime()、now() 和 current_timestamp 是 MySql 中有效的默认日期时间值?

database - 查询最后一天、上周、上个月 SQLite

perl - 如何不匹配字符串?

perl - 用 Perl 从网络驱动器读取文件

python - 如何从两个测量时间绘制连接点的绘图?

perl - log4perl : How to write ERROR message to file and DEBUG message to stderr?

python - 从列中删除不在范围内的日期

R包从日期和小时(整数)构造时间对象

python - 通过避免 NaN 滚动系列