Perl转换不带datetime模块的日期时区

Perl转换不带datetime模块的日期时区,perl,perl-module,mod-perl,Perl,Perl Module,Mod Perl,我的日期格式为:05/26/2013 06:08:00 上述日期的时区为GMT-7 如何将上述内容更改为GMT日期和时间以及格式: 2013年5月26日格林尼治标准时间13:08:00 注意:我不能安装任何perl模块。我知道我可以通过DateTime轻松做到这一点,但我无法安装它 谢谢。假设您的本地时间已设置为GMT-7,只需: use POSIX 'mktime', 'strftime'; my $datetime = '05/26/2013 06:08:00'; my ($month,$d

我的日期格式为:05/26/2013 06:08:00 上述日期的时区为GMT-7

如何将上述内容更改为GMT日期和时间以及格式: 2013年5月26日格林尼治标准时间13:08:00

注意:我不能安装任何perl模块。我知道我可以通过DateTime轻松做到这一点,但我无法安装它


谢谢。

假设您的本地时间已设置为GMT-7,只需:

use POSIX 'mktime', 'strftime';
my $datetime = '05/26/2013 06:08:00';
my ($month,$day,$year,$hour,$min,$sec) = $datetime =~ m{^([0-9]+)/([0-9]+)/([0-9]+) ([0-9]+):([0-9]+):([0-9]+)\z}
    or die "invalid datetime $datetime\n";
my $formatted_time = strftime '%e %B %Y %T %Z', gmtime mktime $sec,$min,$hour,$day,$month-1,$year-1900,0,0,0;
您可能需要%d而不是%e和/或%b而不是%b;查看并验证您的系统是否支持所需的格式说明符。

您可以使用Perl安装中应包含的格式说明符

use Time::Piece;

my $datetime = '05/26/2013 06:08:00';
$datetime   .= '-0700'; # attach the timezone offset

my $dt = Time::Piece->strptime($datetime, '%m/%d/%Y %H:%M:%S %z');
print $dt->strftime('%d %b %Y %H:%M:%S');

什么版本的Perl?为什么不使用local::lib并为您安装DateTime?@MiguelPrz这是一台生产机器。不安装perl模块的背后有各种原因。谢谢。你确定你知道固定偏移量,有时没有夏令时吗?@ysth实际上我在分析一个日志文件。这是格林尼治标准时间-7。根据你在第一条线上的数据,格林尼治标准时间不是2013年5月26日13:08:00格林尼治标准时间吗?太棒了,谢谢!这是否足够一次运行10000个条目?应该是这样,因为它是一个快速、轻便的模块。但最好是您自己测试它,应该注意到Time::Piece只成为PerlV5.9.5的核心模块。