2017-10-27 15 views
0

私のアプリケーションでは、ユーザーは「12:00毎週昼食」などの繰り返しイベントを作成できます。イベントを繰り返す冬の時間/夏の時間を処理する

今、正しくアプローチする方法がわからないという問題が発生しました。イベントの連鎖が大きく、異なるタイムゾーン(冬と夏の時間)の場合、それらのイベントのすべてをリストすると、異なる時間が表示されます。イベントのクライアント側をリストするときに、それは次のようになります。

2017-10-28T12:00:00.000+02:00 

:冬に

2番目と3番目の機会の間
2017-10-21 12:00:00.000 (parsed from: 2017-10-21T12:00:00.000+02:00) 
2017-10-28 12:00:00.000 (parsed from: 2017-10-28T12:00:00.000+02:00) 
2017-11-04 11:00:00.000 (parsed from: 2017-11-04T12:00:00.000+02:00) 
2017-11-11 11:00:00.000 (parsed from: 2017-11-11T12:00:00.000+02:00) 

、クライアントの変更をとして

日付は、例えば、サーバ側に保存されています時間と+01:00です。それに応じて時間が調整され、同じ時間に開始されても、突然開始時刻と時刻になることをユーザーは信じることがあります。

タイムゾーンに関係なく、クライアント側で解析されたときに常にイベント時刻(12:00)が表示されるようにしたいと思います。もう1つの解決策は、Joda時間で情報を抽出できる場合は、夏時間/冬時間で示される状態にすることです。

+0

タイムスタンプをサーバに保存し、それをクライアントに正確に送信し、次にタイムゾーンに従ってクライアントに表示されるものを決定したい場合があります – Lino

+1

代わりに、値を 'LocalDateTime'として保存し、 toDateTime(DateTimeZone) 'を表示します。 –

+0

タイムゾーンが+02:00ではなく、DSTのルールを持つEurope/Parisのようなものなら、すべての日付に対して+02:00を保存するのはなぜですか? –

答えて

1

私はjava8 LocalDateTimeクラスサーバー側を使用し、それが必要な場合はタイムゾーンを無視します。

LocalDateTimeは、タイムゾーン情報なしで日付(および時刻)を指定するケースを正確に処理します。

データベースでタイムゾーンのない日付時刻の格納をサポートしていない場合は、毎回同じタイムゾーン(たとえばUTC)を使用するサーバー上のタイムスタンプとのタイムスタンプの変換が可能です。それをクライアントに送信し、クライアントからLocalDateTimeとして受け取るようにしてください。

編集次のコメントに対する回答として、ローカルタイムゾーンに従って日付をユーザーに表示する場合は、ZonedDateTimeを標準のタイムゾーン(たとえば、UTC)に保存し、Localeユーザーのその後、ロケールを使用して日付をユーザー固有の日付形式に変換できます。これにより、DSTおよびその他のタイムゾーンの変更が念頭に置かれます。

EDIT2:日付時刻を変換するには、地域番号ZoneIdを使用できます。ロケールは書式設定にも役立ちます。

+0

私は複数の国のユーザーを抱えているため、データベースにタイムゾーン情報を保存すると効果があると思っていました。私は試して、クライアントに応答する前に日付をLocalDateTimeに変換します –

+0

@LucasAあなたは[UTCオフセット](https://en.wikipedia.org/wiki/UTC_offset)を保存していますが、 *タイムゾーンと同じこと](https://stackoverflow.com/a/36636543)。 「+02:00」は「UTCの2時間前」を意味しますが、さまざまな時期に多くの国で使用されており、DSTの変更は処理されません。 DSTの効果を本当に考慮するには、[America/New_York'や 'Europe/New_York'のような形式の' Region/City'形式で、[IANAタイムゾーン名](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)ベルリン) –

+0

そのユーザーが何を見たいかによって異なります。 ユーザAはUTCに存在し、BはUTC + 5に住んでいるとします。毎週土曜日の13:30にBが繰り返しイベントを作成した場合、Aは08:30または13:30と表示したいですか? – Buurman

関連する問題