-1

私の Web サーバーは東海岸にあります。東部標準時間の午後 1 時 (PST 時間) に Web サーバーから電子メールを送信しました。私は西海岸に住んでいて、ページを見ると、私にとって未来の時間である午後 4 時を示しています。

午後 1 時、東海岸の誰かが午後 4 時などを見るにはどうすればよいですか?

日付は、UTC である MongoDB に格納されます。表示する前に日付も変換します。

@Model.DateSent.ToLocalTime().ToString();

これは、メールが送信される時間を設定する方法です。

DateTime.UtcNow <-- So I am storing date in UTC already

ありがとう

4

1 に答える 1

1

あなたの質問には2つの部分があります。1 つ目は、C# で dateTime をローカライズするメカニズムです。私は Windows の専門家ではないので、他の誰かに回答してもらうか、ドキュメントを調べてもらうかのどちらかに任せますが、ToLocalTime() には TimeZone または Locale を取る友人がいると確信しています。 .

より興味深い 2 番目の部分は、使用するタイムゾーンを知る方法です。正解はありませんが、いくつかの戦略があります。

  • システムにユーザー アカウントの概念がある場合、最も簡単でおそらく最善の方法は、単純にロケールをユーザー設定にすることです。
  • 常にログインしているユーザー アカウントの概念がない場合は、いくつかの方法があります。
    • セッションに保存される選択肢にすることもできますが、毎回選択を強制するのは少し面倒です
    • より良い代替手段は、インバウンド IP アドレスをジオコーディングし、そこから設定することです。ジオコーディング アプリ、データベース、およびサービスがあります。ほとんどの費用がかかりますが、MaxMind には問題ない無料版があることを私は知っています。それはほとんどうまくいくでしょう。問題は、ユーザーが大規模なプライベート ネットワーク経由でアクセスすることです。私はフィラデルフィアの近くに住んでいます。私のホーム ネットワークは通常、かなりうまくジオコーディングされますが、いくつかのサービスでは、私の ISP があるデラウェア州に配置されます。しかし、会社全体が 1 つの Web プロキシを介して外出する職場では、私はノースダコタ州にいるように見えます。
    • より信頼性が高く、おそらくより複雑なのはgetTimezoneOffset()、Javascript を使用してブラウザーのタイムゾーンを取得し、その回答をサーバーにプッシュすることです。
  • 他のオプションは、タイムゾーンが自由に利用できるブラウザーでローカルに時間を変換することかもしれませんが、それは、データが AJax などを介して取得され、JavaScript を介して更新されることを意味します。基本的に Ajax RIA ベースのアプリを実行している場合は、データを UTC または time_t として送信するだけで問題ありません。しかし、クライアント側のすべてのデータをまだ処理していない従来の Web アプリにとっては、ちょっとばかげて面倒です。

私の最初の選択は、ユーザーの好みです。それができない場合は、おそらくクライアントからタイムゾーンをプッシュします。それが複雑すぎる場合は、IP ジオロケーションを使用してください。

于 2012-05-13T02:39:38.887 に答える