perl - 检查参数是否已格式化为日期
问题描述
如何检查参数是否已格式化?
$start_date = DateTime::Format::Pg->format_date($start_date);
$end_date = DateTime::Format::Pg->format_date($end_date);
更具体地说,我想在格式化之前检查参数 $start_date 和 $end_date 是否已格式化,因为如果它们已经格式化,我会收到错误消息。谢谢!
解决方案
这不完全是您的问题,但这是我复制到我的大多数项目中的一段常见代码:
=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 对象,它的时区与应该存储的不同列),然后我使用数据库引擎的格式化程序将其转换回字符串。
通过使用这样的助手,我不依赖于特定的日期格式化程序,我可以在 SQLite 上运行我的测试用例。
推荐阅读
- javascript - 需要从 Cypess 测试中获取“ID”
- powershell - 我可以只使用程序的 setup.exe 和 shimgen 来使用 Chocolatey 创建一个静默安装程序吗?
- flowground - 性能问题
- sql - SQL获取作业的处理时间
- flutter - 我怎样才能在我的柔性内部有一个柱子而不会将它推出柔性?
- c# - 将浮点数转换为十进制,错误值
- c++ - CMake 如何查找包
- tensorflow - Tensorflow 新版本中的 tf.contrib.nccl.allsum 是什么?
- r - 如何提取列中的一些数据?
- c# - EF Core 延迟加载代理随机返回 null 而不是实体