0

以下の詳細で申請を行っています。

1)C#.Net上のWeb/デスクトップアプリ

2)ユーザーのアクティビティタイムスタンプを日時フィールドとして保存します。

このタイムスタンプをUTC形式で保存する必要があります。

これで、表示中にユーザーのタイムゾーンに変換されます。

問題

ユーザーは、あるオフィスから別のオフィスに移動できます。(すべて異なるタイムゾーンにある複数のオフィス)。

ここで、1か月間のユーザーのアクティビティを表示するとします。(異なるタイムゾーンが含まれる場合があります)。

ユーザーのタイムゾーン情報をどのように保存/追跡できますか?

実行時に時間を変換し、適切な時間を表示するようにします。

例えば

UTC時間

1日目:time1

2日目:時間2

UTC +1:30

3日目:time3

等..

この問題にどのように対処できるかを提案できますか。

前もって感謝します。

4

5 に答える 5

4

アクティビティのタイムスタンプを記録するときに使用DateTime.UtcNowすると、常に正しい時刻が取得されます。そして通常、タイムスタンプを保存するのはサーバーなので、とにかくサーバーに相対的です。

ユーザーが入力した場合は、保存する前に入力時刻をUTCに変換する必要があります。これは、ユーザーのカルチャー/タイムゾーン設定から取得できます。

ユーザーに表示するときは、ユーザーが世界のどこにいるかに応じて、スレッドにカルチャとタイムゾーンの情報を設定します。

日付の「UTC」部分をデータベースに保存しない場合(UTC形式であっても)、次のようにUTCに変換できます。

DateTime date = ..from db..;
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);

タイムゾーン間の変換については、MSDNを確認してください。

于 2010-07-05T13:27:53.053 に答える
1
  1. myDate.ToUniversalTime()を使用して、すべてのレコードをデータベースに保存します
  2. myDate.ToLocalTime()を使用してデータベースからロードする場合

その後、ユーザーは好きなだけ移動できます。

于 2010-07-06T08:35:55.313 に答える
0

現在のタイムゾーン(TimeZoneInfo.LocalまたはTimeZone.CurrentTimeZone、これらは同じですが、最初のタイムゾーンが優先されます)をタイムスタンプと一緒に保存できます。

ユーザーはWindowsの時計のプロパティパネルから現在のタイムゾーンを変更する必要があると思います。

于 2010-07-05T13:27:10.873 に答える
0
System.Threading.Thread.CurrentThread.CurrentCulture

現在の文化情報を返します

于 2010-07-05T13:24:19.080 に答える
0

アプリケーション自体は、任意の方法で信頼できるタイムスタンプを取得するために、ユーザーに現在作業しているタイムゾーンの入力を強制する必要があるように思われます。私の推測では、ログイン時にこの情報を求めています。これはユーザーにとって煩わしいことになるかもしれませんが、ユーザーが何らかのオプションの設定ダイアログを使用してタイムゾーンを更新することを期待するのは幻想です。

リソースがあり、かなり大胆な場合は、VPNトンネルにアクセスしているコンピューターのIPアドレスに基づいてタイムゾーンを取得できますが、それを支援することすらできませんでした。

于 2010-07-06T08:16:57.510 に答える