0

In our application, we have a reporting module in the UI from which an admin can view reports. The admin will be given an option of selecting from_date and to_date. During transactions we store the live data in few tables which we can all as core tables. The data is stored in these tables in UTC timezone. We run a scheduler say every 30 minutes and convert the data from the core tables into what is needed for reports like number of transactions, response time etc. for a day. The requirement is that, for the admin, the data shown should be based on the timezone of his browser. The admins are spread across multiple timezones. How do we store the data and how do we retrieve it? Each time a request is sent, we cannot compute the values.

4

2 回答 2

0

在 oracle 中存储一个日期

create table myTable  (
   Id NUMBER(19) not null,
   MyTime DATE not null,
);

在 Java 中,处理 ajava.util.Date但在存储之前,将其转换为java.util.Calendar

Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
gmtCal.setTime(date);

现在您可以将其存储在基础中

于 2013-07-12T14:21:37.513 回答
0

将交易存储为 UTC 是可以的,并且通常是推荐的做法。

使用评论中的一些建议进行存储TIMESTAMP WITH TIMEZONE将具有额外的好处,即了解适用于事务数据的本地时间和时区。这也可以,但这不是你问的。

你说:

要求是,对于管理员,显示的数据应基于其浏览器的时区。

我将此解释为,无论数据库中的时间设置为 UTC 时间还是带有时区的本地时间,您都希望在输出期间将数据转换为查看报告的人的时区。

但你也说:

每次发送请求时,我们都无法计算这些值。

好吧,由于每个观众可能有不同的数据,我很遗憾地告诉你,但这正是你必须这样做的。无论生成报告的应用程序逻辑如何,都必须将数据的时间戳转换为查看器的本地时间。这通常不在数据库中完成,而是在中间层的应用程序逻辑中完成。如果您直接针对数据库生成报告,则某些报告引擎具有用于操作与报告本身相关的代码或脚本中的时间戳的功能。

无论您的结果是什么,您都应该确保在这些报告的某处(可能在页脚中)输出时区。人类经常会做一些事情,比如通过电子邮件将报告输出给他们的主管、客户等,他们显然可能在不同的时区。

于 2013-07-12T15:44:29.593 回答