我正在开发一个应用程序,其中:
- 身份验证令牌从创建之日起过期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;