Perl DateTime、DBIx::Class和SQLite的时区问题(超时5小时)

Perl DateTime、DBIx::Class和SQLite的时区问题(超时5小时),perl,sqlite,datetime,timezone,dbix-class,Perl,Sqlite,Datetime,Timezone,Dbix Class,我正在使用由dbcidump生成的DBIx::类模式进行插入和查询 最近,我发现我所有的时间都比当地时间(est)提前5小时存储 在我的Result类中,我有\uuu-PACKAGE\uuuu->load\u组件(“充气柱::日期时间”),其中该列定义为“动作时间”{data\u-type=>“日期时间”,is\u-nullable=>0} 是否有一种简单的方法可以控制时区DateTime对象的膨胀/收缩,以便我的查询和插入保持一致 我曾尝试在列定义中添加time\u zone=>“local”

我正在使用由
dbcidump
生成的DBIx::类模式进行插入和查询

最近,我发现我所有的时间都比当地时间(est)提前5小时存储

在我的
Result
类中,我有
\uuu-PACKAGE\uuuu->load\u组件(“充气柱::日期时间”)
,其中该列定义为
“动作时间”{data\u-type=>“日期时间”,is\u-nullable=>0}

是否有一种简单的方法可以控制时区
DateTime
对象的膨胀/收缩,以便我的查询和插入保持一致

我曾尝试在列定义中添加
time\u zone=>“local”
,但没有任何区别

例如:

  • 插入2012-12-12 10:04:03
  • 检索2012-12-12 15:04:03
样本数据:

sqlite> select datetime(action_time,'localtime'),action_time from actions order by id desc limit 3;
2012-12-12 08:35:07|2012-12-12 13:35:07
2012-12-12 08:34:45|2012-12-12 13:34:45
2012-12-12 08:34:43|2012-12-12 13:34:43
编辑:我相信这与我使用的: ; 从文档中:

列值膨胀(例如,使用诸如DBIx::Class::InflateColumn::DateTime之类的模块)不会执行。返回的哈希包含原始数据库值


因此,我想知道如何让该类为datetime字段执行一些特殊的操作。

您的时区可能是
美国/纽约
,它与
-0500
(“EST”)不同,遵循DST

正是由于这个原因,它不是一个适合储存的时区。每年有120分钟,这个时区的时间戳会模糊不清。因此,时间戳实际上存储在UTC中是有意义的

如果要使用或从时间戳显式创建DateTime对象,则可以将这些时间戳转换为时区或任何其他时间戳


使用模式生成器时,您可以指定一个选项,该选项将导致使用此模块(
-o components='[“充气柱::日期时间”]
用于
dbicdump
)。

您的时区可能是
美国/纽约
,与
-0500
(“EST”)不同,它遵循DST

正是由于这个原因,它不是一个适合储存的时区。每年有120分钟,这个时区的时间戳会模糊不清。因此,时间戳实际上存储在UTC中是有意义的

如果要使用或从时间戳显式创建DateTime对象,则可以将这些时间戳转换为时区或任何其他时间戳


使用架构生成器时,您可以指定一个选项,该选项将导致使用此模块(
-o components='[“充气柱::日期时间”]'
用于
dbicdump
)。

此答案是否有帮助?我在看这个,但它并没有一个他所说的例子。这个答案有用吗?我在看,但它并没有一个他所说的例子。对不起,我不认为我说得很清楚-我用的是@-o compents-InflateColum::DateTime@之类的东西@dbicdump@. 我很欣赏UTC的解释,并认为我会将我的api标记为“returning UTC datetimes”以保持一致性。对不起,我不认为我说得很清楚-我使用的是@o compents InflateColum::DateTime@东西@dbicdump@. 我很欣赏UTC的解释,并认为我会将我的api标记为“returning UTC datetimes”以保持一致性。