Сравнение двух объектов Time :: Piece - PullRequest
2 голосов
/ 03 июля 2019

Я экспериментировал с пакетами Time :: Piece и Time :: Seconds и написал приведенный ниже скрипт для сравнения двух объектов Time :: Piece.То, что я пытаюсь сделать, это определить, является ли текущее время дня до или после определенного времени дня.В этом случае я установил конкретное время 10: 30: 00.

Я распечатал два значения Time :: Piece, и из этого похоже, что коды должны работать, но результатразве я не ожидаю.

Может кто-нибудь увидеть, что случилось с моими кодами?

use strict;
use warnings;
use Time::Piece;
use Time::Seconds;

my $settDate;
my $time = Time::Piece->new;
my $eod  = Time::Piece->strptime($time->date . "T10:30:00", '%Y-%m- %dT%H:%M:%S');
print "Time is: ${time}, EOD is: ${eod}\n";
if ($time > $eod) {
    print "Yes, we've passed EOD.\n";
    $settDate = $time->strftime('%Y/%m/%d');
} else {
    print "No, we haven't passed EOD yet\n";
    $settDate = ($time - ONE_DAY)->strftime('%Y/%m/%d');
}
print "Default date is: ${settDate}\n";

Вывод показывает:

Time is: Wed Jul  3 15:44:26 2019, EOD is: Wed Jul  3 10:30:00 2019
No, we haven't passed EOD yet
Default date is: 2019/07/02

1 Ответ

0 голосов
/ 03 июля 2019

Неожиданный результат сравнения, вероятно, из-за различных смещений часовых поясов в $time и $eod - Time::Piece->new дает местное время, тогда как Time::Piece->strptime дает UTC.
Самый простойИсправление было бы всегда использовать UTC: заменить Time::Piece->new на Time::Piece->gmtime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...