【问题标题】:catalyst DBIx::Class::TimeStamp set time on insertion to database not working催化剂 DBIx::Class::TimeStamp 设置插入数据库的时间不起作用
【发布时间】:2012-08-10 08:06:34
【问题描述】:

我正在使用 Catalyst 和 DBIx::Class::TimeStamp,并且我的 ResultSet 类之一被配置为在插入一行时将 DateTime 列设置为当前时间:

__PACKAGE__->load_components("TimeStamp");

__PACKAGE__->add_columns(
   start_time => { data_type => 'datetime', set_on_create => 1 }
);

每当创建一行时都会插入一个时间,但它是未来大约 6 小时。每当我使用 MySQL 及其 NOW() 函数插入时间时,它都会正确获取时间。有谁知道为什么会这样?我正在Mac上开发,如果有帮助的话。谢谢!

【问题讨论】:

    标签: mysql macos perl datetime dbix-class


    【解决方案1】:

    DBIx::Class::TimeStamp 使用DateTime->now 获取时间,因此结果取决于您的计算机设置。但是 MySQL 的 NOW() 结果取决于 MySQL 的设置。查看您的计算机、数据库服务器和 MySQL 上的时区设置。

    【讨论】:

      【解决方案2】:

      您总是可以覆盖 Result 类中的 get_timestamp 列,并返回具有正确时区集的 DateTime 对象。例如:

      package My::Schema::Result::MyTable;
      
      # ... snip ...
      
      sub get_timestamp {
          return DateTime->now( time_zone => "GMT" );
      }
      

      【讨论】:

        【解决方案3】:

        在开始时间散列中,添加:

        时区 => '本地'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-02
          • 2014-11-08
          • 2012-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多