Datetime 减去不同时区中的日期时间

Datetime 减去不同时区中的日期时间,datetime,timezone,informix,timezone-offset,Datetime,Timezone,Informix,Timezone Offset,我被要求创建一个查询,以便从Informix数据库中提取一个近实时的报告。我只有select access,无法创建SP,我感觉自己非常成功,直到我意识到datetime字段中存在差异。似乎正在填充数据库的程序已硬编码为在datetime字段中输入时间,以UTC为单位,与本地时间相差五小时。当时间是2:30时,它在数据库中输入了一行,表示John Doe在7:30完成了任务。在我的报告中,我应该以整数计算秒数,因为用户已完成任务字段为completionTime,我最初只是使用: sysdate

我被要求创建一个查询,以便从Informix数据库中提取一个近实时的报告。我只有select access,无法创建SP,我感觉自己非常成功,直到我意识到datetime字段中存在差异。似乎正在填充数据库的程序已硬编码为在datetime字段中输入时间,以UTC为单位,与本地时间相差五小时。当时间是2:30时,它在数据库中输入了一行,表示John Doe在7:30完成了任务。在我的报告中,我应该以整数计算秒数,因为用户已完成任务字段为completionTime,我最初只是使用:

sysdate - completionTime interval seconds(9) to seconds cast to char then cast to int
当我意识到completionTime字段的时区错误时,我只是将偏移量减去一个整数,我已经在将间隔转换为一个整数,所以我只是将答案调整了18000。在夏时制开始之前,这一切都很顺利。然后,当地时间突然变为4小时14400秒,而不是UTC的18000秒

由于我只能从数据库中进行选择,接下来我尝试使用一个低效的case语句,我的查询来自也许可以使用DBINFO'utc_current'代替sysdate:


更简单的方法是使用UTC执行所有计算,或者使用Unix时间戳。如果我们忽略闰秒期间的时间,则很容易将一个转换为另一个。如果完成时间以UTC为单位,则不需要本地时间来计算用户完成任务后的秒数,因此无需担心DST和UTC偏移量。您应该能够轻松地获取UTC时间或Unix时间戳的当前时间。好的,这是我的问题。你说,你应该能够。。。这就是我一直在想的-我应该能够。。。但是我找不到任何方法来做这件事。我能找到的任何获取当前时间的方法都会返回本地时区。有没有办法从Informix获取当前UTC时间或unix时间戳?到目前为止,我还没有找到这个。有没有办法从Informix获取当前UTC时间或unix时间戳看起来是个好问题,如果还没有,你可以单独问。
cast(cast(cast((sysdate - dbinfo("utc_to_datetime", cast(cast(cast((completionTime - TO_DATE('Friday January 1, 2010 0:00', '%A %B %d, %Y %R')) as interval second(9) to second) as char(10)) as int)  +1262304000)) as interval second(9) to second) as char(10)) as int)
SELECT DBINFO('utc_current') - (completionTime interval seconds(9) to seconds) FROM ...