我已将时间存储在数据库中作为没有时区的时间,我希望这次使用时区进行投射,然后将其与当前时间进行比较。
WHERE (my_time::time AT TIME ZONE country_timezone)
BETWEEN (current_time::time) - 60 * INTERVAL '1 minute'
AND (current_time::time) + 60 * INTERVAL '1 minute'
但问题是它总是与没有时区的时间进行比较,即使我将它与时区一起投入时间。
所以例如
'my_time' => string '18:00:00+09' (length=11)
'current_time_plus' => string '10:51:47.997405'
'current_time_minus' => string '09:51:47.997405'
这不应该匹配,但是因为my_time = 10:00:00
与时区不同,所以它是匹配的。如何将时间与时区相匹配?
答案 0 :(得分:0)
我建议不要将时间与时区混在一起。我无法检查自己,但我认为
WHERE (my_time::time AT TIME ZONE country_timezone)
BETWEEN (current_time::timetz) - 60 * INTERVAL '1 minute'
AND (current_time::timetz) + 60 * INTERVAL '1 minute'
应该有效。因为在您::time AT TIME ZONE
后它变为timetz
并且您再次将其与timestamptz::time
进行比较,这会给您带来意想不到的结果