我在代码中使用sysdate查询来获取过去3小时内的最后更新行(应该是可配置的)。数据库以GMT时区运行,应用程序在PST时区运行。查询看起来像这样
select * from <table> where updated_Date < sysdate - numdtodsinterval(3,'hour')
从具有与db不同的时区的应用程序触发此类查询的建议/最佳做法是什么。
答案 0 :(得分:1)
使用jdbc按原样点火。
Sysdate在服务器上解释,所以你应该没问题。无论客户端时区如何,它都会返回过去3小时的更新。 (如果您使用sysdate也保存了updated_date,那就是!)
答案 1 :(得分:1)
我不得不说,涵盖大量时区的应用程序的最佳实践是停止使用DATE数据类型并开始使用带有TIMEZONE数据类型的TIMESTAMP。
我并不是说这很容易,只是说'这可能是出于几个原因的最佳做法。
主要是它消除了任何和所有歧义。如果您使用DATE,则没有人能够根据该值计算出该值的计算结果。你懂。也许你对专栏(理想)有评论但可能会被忽视。如果它是具有TIMEZONE数据类型的TIMESTAMP,则您已经确定了与我的本地时钟无关的特定时刻。
但是这假设您可以更改数据库架构,而这可能是您无法更改的。因此,这可以作为下一个日期列的警告。