匹配时间与当前时间之间的时区

时间:2018-01-22 08:55:53

标签: sql postgresql

我已将时间存储在数据库中作为没有时区的时间,我希望这次使用时区进行投射,然后将其与当前时间进行比较。

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与时区不同,所以它是匹配的。如何将时间与时区相匹配?

1 个答案:

答案 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进行比较,这会给您带来意想不到的结果