0

我在我的代码中遇到了日期/时间计算的时区问题。将需要您的建议。下面是场景。

我的应用程序必须从 hbase 数据库中选择数据。此数据将根据 hbase 中的表中的日期搜索条件进行选择。该表有一个用于过滤的日期时间列。

现在,在此表中填充数据的另一个应用程序正在以 GMT 时区格式插入日期时间(这是该团队所说的)。该应用程序部署在位于 EST 时区的服务器上。我从用户那里得到一个输入日期(没有时间分量),我需要将其转换为 GMT 时区。但是目前正在发生的事情是,当我进行转换时,某些数据没有在 EST 时区被选取。在我的本地时区 IST 中选取了相同的数据。我已经在部署在我的本地和远程 server.example 中的代码中完成了到 GMT 的转换。

表中数据的日期:2013-03-15 01:30:30

用户输入数据:2013-03-15(无时间分量)。我特别添加了时间组件。

添加时间组件后的日期:开始日期-2013-03-15 00:00:00,结束日期-2013-03-15 23:59:59。

我在 IST 时区(UTC+5:30)。所以转换为 GMT 的开始日期和结束日期都是

开始日期转换为 GMT -2013-03-14 18:30:56。

结束日期转换为 GMT - 2013-03-15 18:30:56。

现在,由于用户 2013-03-15 01:30:30 提供的日期在上述范围内,因此表中的数据正在此时区中提取。

相同的代码部署在 EST(UTC-5:00) 中的远程服务器中。

开始日期转换为 GMT -2013-03-15 05:00:56。

结束日期转换为 GMT - 2013-03-16 05:00:56。

现在,由于用户 2013-03-15 01:30:30 提供的数据不在此范围内,因此数据没有被拉起。

我不确定如何处理这种情况,以便跨时区的计算保持一致。因为测试人员说数据应该跨时区保持一致。但是正如您所看到的,GMT 转换已经完成,但日期因两个时区的偏移量而不同,并且数据没有被拉起。如果你能让我知道如何处理这将是很大的帮助。

我没有在此处放置任何代码,因为它是在线找到的时区标准代码,并且在大多数情况下都是相同的。

4

2 回答 2

0

这真的取决于你想在这里实现什么。

如果您真的希望输入被解释为本地时间,并转换为 GMT 以检查数据库,那么结果实际上是一致的,反过来想问题,如果您神奇地转换每个日期会得到哪些记录HBase 到你的本地时间?

如果用户输入的日期实际上是特定于 TZ 的,那么相同的日期“文本”返回不同的结果是很自然的,因为两个用户实际上指的是两个不同的时间点。

另一方面,如果您需要用户提供相同的输入以获得完全相同的结果,那么您需要假设输入已经在某个一致的 TZ 中,例如,总是在 UTC(或在您的情况下为 GMT) .

基本上你需要决定的是:

用户给出的输入是否2013-03-15特定于用户的 TZ?还是在特定的 TZ 中总是在同一时刻?IST、EST、GMT,由您决定。

如果你做出这个决定,你的结果将是一致的。

于 2013-03-19T19:33:47.270 回答
0
于 2018-02-11T21:45:05.673 回答