Это не совсем ваш вопрос, но вот обычный фрагмент кода, который я копирую в большинство моих проектов:
=head2 format_datetime
->search({ date_col => { '>=' => $schema->format_datetime( $myDate ) } })
Utility method to properly format a DateTime according to the current storage
engine. Optional second argument converts the datetime to a specific time zone
before stringifying.
=cut
sub format_datetime {
my ($self, $datetime, $time_zone)= @_;
# Make a datetime if it isn't already
$datetime= DateTime::Format::Flexible->parse_datetime($datetime)
unless ref $datetime && ref($datetime)->can('set_time_zone');
# Force time zone
$datetime= $datetime->clone->set_time_zone($time_zone)
if defined $time_zone and $datetime->time_zone ne $time_zone;
$datetime->set_time_zone('floating'); # prevent datetime formatter from changing time zone
return $self->storage->datetime_parser->format_datetime($datetime);
}
Обратите внимание, что я использую DBIx :: Class и этот метод переходит в класс Schema. Но в любом случае, дело в том, что я проверяю, является ли значение объектом DateTime, и, если нет, я анализирую его, то я устанавливаю правильный часовой пояс (если это был уже объект DateTime с другим часовым поясом, чем тот, который должен быть сохранен в столбец), а затем я использую средство форматирования для механизма базы данных, чтобы преобразовать его обратно в строку.
Используя такой помощник, я не зависим от указанного c средства форматирования даты и могу запустить мои тесты на SQLite.