0

Web アプリケーションで HTTP リクエストを介して送信した日付を表示しようとしています。

ロケール環境では、送信された日付は正しく表示されますが、webapp がサーバーに展開されると、表示される日付は、送信した日付ではなく、サーバー上の現在の日付に対応します。

http リクエストの例: 送信される HTTP リクエスト: http ://...?persoDate="03/10/2013 11:29:55"

これが私のコードです:

def initDate = new SimpleDateFormat("d/M/yyyy H:m:s").parse(params["persoDate"].replaceAll(/"/, ''))

MyInstance.addToAbList(new BOSSession(setDateSession:initDate))

MyInstance.save(flush: true)
4

1 に答える 1

1

この日付/時刻が含まれていると予想されるタイムゾーンがありません。ローカル コンピューターでは、おそらくあなたが期待しているものです。いずれにせよ、それはあなたのコンピューターであり、現在いる場所の時間を示している可能性が高いです。ただし、サーバーは UTC またはその他のタイムゾーンにある可能性があり、日付をそのタイムゾーンに関連するものとして解釈します。これを解析してローカル タイムゾーンに変換すると、タイムゾーンに関してローカル コンピューターとサーバーの「距離」に応じて、最大 24 時間オフになります。

あなたのコメントに続いて:

Java 型の Date には常にタイムゾーンがありません。タイムゾーン処理を行うには、Calendar を通過する必要があります。これは、日付の保存中または表示中に発生する可能性があるものです。最初に、問題がどこにあるかを見つける必要があります。つまり、解析中、保存中 (実際にデータベースに何が残るか)、またはデータベースに書き込まれた値の表示中です。また、後で値を表示するときに再生成するために、目的のタイムゾーンをデータベースに明示的に保存する必要がある場合もあります。

テストする手順:

  • ローカル コンピューターのタイムゾーンは? サーバーのタイムゾーンは?DBサーバーの?
  • データベースには何が保存されますか? タイムゾーンが含まれていますか?
  • データベースから何を読み取りますか?
  • ユーザーには何が表示されますか? 行うフォーマットによっては、タイムゾーンの計算も行う場合があります。

さまざまなステップのどれに修正が必要かがわかるとすぐに、さらに詳しく調べる必要があります。あなたの問題がどのステップにあるのか、ここからはわかりません。したがって、コードサンプルはありません...(また、グルーヴィーな筋肉を長い間行使していません)申し訳ありません。

Web アプリケーションを使用している場合は、ユーザーが実際に期待しているタイムゾーンを確認してください。単一のタイムゾーンのみを処理する必要がある場合 (そして、別のタイムゾーンが存在しないことをさらに確信している場合) は、処理したいタイムゾーンにサーバーを設定し、すべてのユーザーがいるようにするだけです。この仮定はすぐに崩れます。後で、しかし今のところ、あなたは設定されています:(

于 2013-10-04T09:46:36.540 に答える