【发布时间】:2014-08-20 03:27:27
【问题描述】:
我无法比较 Catalylst 中的 DateTime 对象。我有一个 end_date 列,它被DBIx::Class::InflateColumn::DateTime 夸大了,我正在用我的时区夸大它:
__PACKAGE__->add_columns(
end_date => { data_type => 'datetime', time_zone => 'America/Chicago' },
);
我有一个函数应该告诉我我的事件是否已关闭,这是在我的 Schema 中为此类定义的:
sub closed {
my ($self) = @_;
my $now = DateTime->now(time_zone => 'America/Chicago');
warn DateTime->compare($now, $self->end_date);
warn $now;
warn $self->end_date;
return DateTime->compare($now, $self->end_date) == 1;
}
但是,它无法正常工作。它告诉我事件在实际结束之前已经结束。这是警告的示例输出:
1
2014-06-29T12:20:48
2014-06-29T12:20:50
如您所见,第一个日期大于 end_date,即使不是。我一直无法弄清楚这是为什么。但是,每当我转换它们并创建新的 DateTime 对象时:
sub closed {
my ($self) = @_;
my $now = DateTime::Format::ISO8601->parse_datetime(DateTime->now(time_zone => 'America/Chicago'));
my $end_date = DateTime::Format::ISO8601->parse_datetime($self->end_date);
return DateTime->compare($now, $end_date) == 1;
}
然后他们正确比较,比较返回-1。有谁知道为什么会这样?
【问题讨论】:
标签: perl datetime catalyst dbix-class