1

によって生成されたDBIx::Classスキーマを使用しdbcidumpて、挿入とクエリを実行しています。

最近、すべての時刻が現地時間(est)より+5時間進んで保存されていることを発見しました。

私のResultクラスには__PACKAGE__->load_components("InflateColumn::DateTime")、列が次のように定義されているがあり"action_time", { data_type => "datetime", is_nullable => 0}ます...

DateTimeクエリと挿入の一貫性を保つために、タイムゾーンオブジェクトの膨張/収縮を制御できるようにする簡単な方法はありますか?

time_zone => 'local'列定義に追加しようとしましたが、違いはありません。

例えば:

  • 挿入2012-12-1210:04:03
  • 2012-12-1215: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

編集:これは私の使用と関係があると思います: http ://search.cpan.org/dist/DBIx-Class/lib/DBIx/Class/ResultClass/HashRefInflator.pm ; ドキュメントから:

たとえば、DBIx :: Class :: InflateColumn :: DateTimeなどのモジュールを使用した場合、列値のインフレーションは実行されません。返されるハッシュには、生のデータベース値が含まれています。

したがって、そのクラスに日時フィールドに対して特別なことを実行させる方法を考えています。

4

1 に答える 1

4

あなたのタイムゾーンはおそらくで、 ("EST")America/New_Yorkとは異なり、DST に従います。-0500

まさにそのため、保存に適した時間帯ではありません。このタイム ゾーンのタイム スタンプがあいまいになる時間は、毎年 120 分あります。したがって、タイムスタンプが実際には UTC で保存されることは理にかなっています。

DBIx::Class::InflateColumn::DateTimeを使用する場合、またはタイム スタンプから DateTime オブジェクトを明示的に作成した場合、これらのタイム スタンプを自分のタイム ゾーンまたはその他のタイム ゾーンに変換できます。

このモジュールを使用するスキーマ ジェネレーターを使用するときに指定できるオプションがあります ( -o components='["InflateColumn::DateTime"]'for dbicdump)。

于 2012-12-12T16:29:54.587 に答える