Oracle查询,适用于EST时区的Day Light Saving



我正在开发一个应用程序,其中:

  • 身份验证令牌从创建之日起过期2小时时间
  • 存储在DB中的令牌创建和到期时间为本地日期/时间(即EST(
  • DST开始前2小时内生成的代币,1小时后过期时钟向前移动1小时
  • 例如:如果代币是在2021年3月14日凌晨1:30创建的,则其创建和到期时间将在DB中设置为"2021-03-14 01:30:00"one_answers"2021-03-14 03:30:00"。现在,假设夏令时从2开始下午,服务器时间将是3点有效期至3:30,现在将于2:30到期

当前我使用的查询在美国开始进行日光节约时开始失败。下面的查询用于从DB获取活动令牌:

SELECT * FROM tbl1  WHERE TOKEN_VALUE = 'xyztoken' AND 
TOKEN_EXPIRATION > CURRENT_TIMESTAMP;

有没有任何方法可以调整上面的查询,使其在美国开始一天的节能后返回正确的结果。

TOKEN_EXPIRATION和TOKEN_CREATION字段在TIMESTAMP

假设您的TOKEN_EXPIRATION存储为DATE数据类型,其中日期/时间表示EST时区中的时间,则可以使用将其转换回TIMESTAMP WITH TIME ZONE

SELECT *
FROM   tbl1
WHERE  TOKEN_VALUE = 'xyztoken'
AND    FROM_TZ( CAST( TOKEN_EXPIRATION AS TIMESTAMP ), 'EST5EDT' ) > CURRENT_TIMESTAMP;

如果是TIMESTAMP列,则可以跳过CAST:

SELECT *
FROM   tbl1
WHERE  TOKEN_VALUE = 'xyztoken'
AND    FROM_TZ( TOKEN_EXPIRATION, 'EST5EDT' ) > CURRENT_TIMESTAMP;

最新更新