我有一个Perl Catalyst应用程序,可以在MySQL数据库中存储一些时间。时间类型为TIMESTAMP,并使用NOW()初始化。
当回读它们看起来在数据库默认时区中的时间时。但是当使用mysql shell时,我可以通过 SET time_zone ='+ 03:00'; 轻松设置时区,并为我的时区获取正确的本地时间。
有没有办法在运行时在Catalyst或DBIx中设置这样的时间?
我希望能够为不同的用户支持不同的时区,因此仅更改数据库的默认时区是不够的。我也知道在从MySQL获取数据后我可以在Perl中格式化时间,但是Catalyst,DBIx和Template Toolkit的自动化程度如此之高,因此从数据库中正确获取数据将是如此之多更方便。
答案 0 :(得分:2)
我的一般建议是在应用程序中设置日期时间,而不是依赖于数据库服务器的日期时间。如果您不需要知道日期时间设置的时区,则应将其存储在UTC中。如果您以后需要知道时区,则需要使用支持此数据库的数据库数据类型,如Oracle中的“timestamp with timezone”。
请参阅我对Formatting timestamp field for output in TemplateToolkit的回答,这似乎就是您所要求的。