gpt4 book ai didi

perl - 获取经度/纬度并在 Perl 中获取 UTC 偏移量

转载 作者:行者123 更新时间:2023-12-04 03:27:49 24 4
gpt4 key购买 nike

当我唯一知道目的地时间的是经度和纬度时,我正在尝试本地化 UTC 时间。我想出了一些可行的方法,但感觉很笨拙:

# We need to get localized time for display purposes.
state $moduleGeoLocation = require Geo::Location::TimeZone;
my $gltzobj = Geo::Location::TimeZone->new();
my $tzName = $gltzobj->lookup( lon => $params->{'longitude'}, lat => $params->{'latitude'} );
say "TimeZone: " . $tzName;

到目前为止一切顺利。这就是杂乱无章的地方。我正在使用 Time::Piece 的 strptime 解析时间,但我没有时区的 GMT 偏移量,所以在我解析 Time::Piece 中的 UTC 时间之后: Piece,我将它发送到 DateTime 以进行时区计算。同时使用 DateTime 和 Time::Piece 似乎相当笨拙:

# Get TimeZoneOffset.
state $moduleDateTime = require DateTime;
state $moduleDateTimeTimeZone = require DateTime::TimeZone;
my $timeZone = DateTime::TimeZone->new( 'name' => $tzName );

my $timePiece = Time::Piece->strptime($hour->{'time'}, '%Y-%m-%dT%H:%M:%SZ');
my $time = DateTime->from_epoch( 'epoch' => $timePiece->epoch, 'time_zone' => $timeZone );

有没有更好的方法来完成我正在做的事情?我的目标是尽可能快地获得本地化时间的结果。

最佳答案

您的问题归结为以下几点:

How do I create a DateTime object from a timestamp using the %Y-%m-%dT%H:%M:%S format. I have the appropriate time zone as a DateTime::TimeZone object.

要将日期时间解析为 DateTime,首先应该寻找合适的 DateTime::Format::模块。

DateTime::Format::Strptime将与您当前的尝试最相似。

use DateTime::Format::Strptime qw( );

my $format = DateTime::Format::Strptime->new(
pattern => '%Y-%m-%dT%H:%M:%S',
strict => 1,
time_zone => $tz,
on_error => 'croak',
);

my $dt = $format->parse_datetime($ts);

你也可以使用 DateTime::Format::ISO8601 ,尽管您不能将它用作验证器,因为它不只接受规定的格式。

use DateTime::Format::ISO8601 qw( );

( my $dt = DateTime::Format::ISO8601->parse_datetime($ts) )
->set_time_zone('floating')
->set_time_zone($tz);

鉴于后一种解决方案会覆盖任何明确提供的时区,为清楚起见,我将使用第一种解决方案。

关于perl - 获取经度/纬度并在 Perl 中获取 UTC 偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67324732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com