我已经做了一些搜索,我不知道如何使用核心Perl模块正确地转换它。我有2013-10-22T19:31:00Z
,想要获得10/22/2013和美国中部时间。如何正确转换日期时间和时区?
回答
标准Perl模块?
这将包括从5.10开始已经成为Perl的一部分的Time::Piece。
#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
use Time::Piece;
my $date = "2013-10-22T19:31:00Z";
my $time = Time::Piece->strptime ($date, "%Y-%m-%dT%H:%M:%SZ");
$time = localtime($time); # Converts time to local time
say $time->mdy("/");
此打印出:
10/22/2013
那古怪"%Y-%m-%dT%H:%M:%SZ"
字符串代表你的时间输入格式。您可以在strftime的管理中找到它。
%Y
:四位数表示的年份%m
:月从01 - 12%d
:日从01 - 31%H
:小时,从00 - 23%M
:从00分钟 - 59%S
:第二个从00到59
这不会转换为中央时间 – ikegami
我已经添加了一个'localtime'函数。这会将'$ time'对象转换为本地时间而不是GMT。如果您当地的时间是中央时间,这将起作用。也许真正的答案是使用[Slaven's](http://stackoverflow.com/a/19528445/368630)设置'$ ENV {TZ}变量并运行'tzset'的技巧。 –
use DateTime::Format::RFC3339 qw();
use DateTime::Format::Strptime qw();
my $in_dt_format = DateTime::Format::RFC3339->new();
my $out_dt_format = DateTime::Format::Strptime->new(
pattern => '%m/%d/%Y %H:%M:%S',
on_error => 'croak',
);
my $dt = $in_dt_format->parse_datetime('2013-10-22T19:31:00Z');
$dt->set_time_zone('America/Chicago');
say $out_dt_format->format_datetime($dt); # 10/22/2013 14:31:00
这里只用核心模块的解决方案(当然,你需要有至少Perl的5.8):
use strict;
use POSIX qw(tzset strftime);
use Time::Local qw(timegm);
my $iso_time = "2013-10-22T19:31:00Z";
my $formatted_time;
{
local $ENV{TZ} = "America/Chicago";
tzset;
if (my($y,$m,$d,$H,$M,$S) = $iso_time =~ m{^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$}) {
$formatted_time = strftime '%m/%d/%Y %H:%M:%S', localtime timegm $S,$M,$H,$d,$m-1,$y;
} else {
# invalid ISO date, do something
}
}
tzset; # restore default time zone handling
warn $formatted_time, "\n"; # output is "10/22/2013 14:31:00"
有关TZ
招一个字:通过设置环境变量TZ
一些时间相关的libc函数(例如localtime
)使用该时区而不是默认时区。如果在程序中设置了TZ
环境变量,则必须调用tzset()
来调整与内部时间相关的数据结构。并且不要忘记再次调用tzset()
来重新恢复数据结构。
这应该适用于大多数Unix系统,但可能在Windows系统上运行,也可能不运行。
- 1. 如何长型时间值转换为日期时间与正确的时区
- 2. 大熊猫转换日期时间与正确的时区
- 3. 转换成正确的日期时间
- 4. PHP时区转换/ PHP日期不显示正确的时区
- 5. 如何日期和时间转换为用户时区
- 6. 日期时间时区转换错误
- 7. 日期和时间转换
- 8. 如何转换时间和日期
- 9. 转换日期时间,使用时区有时UTC工作正确
- 10. 转换日期时间到时区,设置时间和转换回
- 11. 如何日期和时间转换成日期时间/时间戳
- 12. [R日期和时间变换时区
- 13. 给定日期/时间和时区,如何将其转换为UTC时间戳?
- 14. 社区Sqlite不正确处理日期和日期时间
- 15. 如何在日期的正确对象中转换时间戳?
- 16. 如何将时区日期转换为正确的当地日期?
- 17. 将日期和时间转换为GMT + 10日期和时间
- 18. 如何将IronPython日期时间转换为.NET日期时间?
- 19. 如何将UTC日期/时间转换为EST日期/时间
- 20. codeigniter日期和时间在视图中不能正确转换
- 21. 如何正确转换日期时间字符串的utc时间位移?
- 22. 如何在android中转换日期和时间,如时间轴?
- 23. 如何将日期时间转换为不同的时区?
- 24. 转换UNIX时间正常的日期和时间C#
- 25. 在python中使用正确的日期转换和计算日期时间物体的时区
- 26. 如何转换CEST和UTC时区之间的日期时间对象
- 27. 时刻不转换正确的日期
- 28. MomentJS时区返回的日期和时间不正确
- 29. 将日期和时间转换为日期+时间戳
- 30. 将时间和日期转换为mysql日期时间
对于使用核心模块转换日期/时间格式,请参阅[此SO问题](http://stackoverflow.com/questions/17037539/perl-convert-date-timezone-without-datetime-module)等。 – ThisSuitIsBlackNot
@ThisSuitIsBlack不,没有足够的信息来回答他在这个问题的答案中的问题。 – ikegami
@ikegami然而,有一个链接到Time :: Piece的文档,这将是一个好的开始。 – ThisSuitIsBlackNot