Java,Oracle 数据库 - trunc(nvl) 从日期时间对象中剥离时间戳后出现时区问题
Java, Oracle db - Timezone issues after trunc(nvl) strips timestamp from a datetime object
正在尝试修复我们报告中的错误。目前问题是这样的:
太平洋标准时间 2 月 22 日 9:45PM,有人提交了工单。
它命中我们的 Oracle 数据库并规范化为 EST(我们的数据库在 EST 中,但我们与美国各地的客户合作)。
在 iReport 中,我们使用以下内容:
trunc(nvl(ls.date_occurred,ls.date_created)) between TRUNC($P{DATE_FROM}) AND TRUNC($P{DATE_TO})
这会去除 datetime 对象的时间戳,因此生成报告时不会保存小时数,只会保存现在 2/23 的日期(分别为 12:25 AM)。
这显然会影响我们的报告功能。所有数据似乎都是正确的,除了由于时区差异而在一天后生成的日期偏移,以及调整后的数据没有与之关联的时间戳。
有没有人有另一种方法来调整日期时间而不使用从日期中去除时间戳的函数?
据我所知,您的 from/to 日期不在美国东部标准时间,这使得您报告中要求的日期与数据库中的日期之间存在差异。如果截断日期,为了获得正确的记录,您需要根据请求的时区调整请求的 to/from 日期(如果您从 PST 时区请求,首先将日期转换为 EST,然后进行查询)
此外,您可以查看:TIMESTAMP WITH TIME ZONE 数据类型
https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm
原来我需要调整 nvl 中 date_created 的时区,因为 date_occurred 被截断而 date_created 没有。这会导致数据丢失。
正在尝试修复我们报告中的错误。目前问题是这样的:
太平洋标准时间 2 月 22 日 9:45PM,有人提交了工单。
它命中我们的 Oracle 数据库并规范化为 EST(我们的数据库在 EST 中,但我们与美国各地的客户合作)。
在 iReport 中,我们使用以下内容:
trunc(nvl(ls.date_occurred,ls.date_created)) between TRUNC($P{DATE_FROM}) AND TRUNC($P{DATE_TO})
这会去除 datetime 对象的时间戳,因此生成报告时不会保存小时数,只会保存现在 2/23 的日期(分别为 12:25 AM)。
这显然会影响我们的报告功能。所有数据似乎都是正确的,除了由于时区差异而在一天后生成的日期偏移,以及调整后的数据没有与之关联的时间戳。 有没有人有另一种方法来调整日期时间而不使用从日期中去除时间戳的函数?
据我所知,您的 from/to 日期不在美国东部标准时间,这使得您报告中要求的日期与数据库中的日期之间存在差异。如果截断日期,为了获得正确的记录,您需要根据请求的时区调整请求的 to/from 日期(如果您从 PST 时区请求,首先将日期转换为 EST,然后进行查询)
此外,您可以查看:TIMESTAMP WITH TIME ZONE 数据类型 https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm
原来我需要调整 nvl 中 date_created 的时区,因为 date_occurred 被截断而 date_created 没有。这会导致数据丢失。