0

コードでの日付/時刻計算のタイムゾーンの問題で立ち往生しています。同じ上であなたの提案が必要になります。以下はシナリオです。

私のアプリケーションは、hbase db からデータを取得する必要があります。このデータは、hbase のテーブルからの日付検索基準に基づいて選択されます。テーブルには、フィルタリングに使用される日時列があります。

現在、このテーブルにデータを入力する他のアプリケーションは、datetime を GMT タイムゾーン形式で挿入しています (これがそのチームの発言です)。アプリケーションは、EST タイムゾーンのサーバーにデプロイされます。GMTタイムゾーンに変換する必要があるユーザーから入力日付(時間コンポーネントなし)を取得します。しかし、現在起こっていることは、変換を行うと、一部のデータが EST タイムゾーンで選択されていないということです。同じデータがローカルタイムゾーン IST で選択されています。以下のローカル サーバーとリモート サーバーの両方にデプロイされているコードで 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 固有のものである場合、2 人のユーザーが実際には 2 つの異なる時点を参照しているため、同じ日付「テキスト」が異なる結果を返すのは当然です。

一方、まったく同じ結果を得るために同じ入力を与えるユーザーが必要な場合は、入力がすでに一貫した TZ にあると想定する必要があります。たとえば、常に UTC (または GMT) です。 .

基本的にあなたが決める必要があるのは:

ユーザーによって与えられた入力は2013-03-15、ユーザーの TZ に固有のものですか? それとも、特定の TZ で常に同じ瞬間ですか? IST、EST、GMT、あなたが決めます。

その決定を下せば、結果は一貫したものになります。

于 2013-03-19T19:33:47.270 に答える