0

日付値を UTC 形式で SQL Server DB に保存してから、それらを現地時間に変換して表示しようとしていますが、正常に動作しているようです。保存されている DB 日付値が異なることがわかります (既に UTC に変換されていると思います)。 、それを取得し、表示も正確であり、日付と時刻オプション(タスクバーのWindows時刻設定の右下)で変更して別のタイムゾーンをテストして、自分自身を「移行」しようとするまで正確です。どうやら、私が変更したタイムゾーンには3時間の違いがありますが、私は自分の国にいるので、日付はまだ残っているようです.

別のタイムゾーンで日付表示をテストする方法についてアドバイスをいただけますか?

ありがとう。

日付値を SQL Server に保存する:

DateTime dateFrom = DateTime.Parse(startDateTime).ToUniversalTime();
DateTime dateTo = DateTime.Parse(endDateTime).ToUniversalTime();
parameters.Add(new SqlParameter("@StartDateTime", dateFrom));
parameters.Add(new SqlParameter("@EndDateTime", dateTo));

DB から取得して表示:

DateTime date = DateTime.UtcNow.ToLocalTime();
date = DateTime.Parse(dr["StartDateTime"].ToString()).ToLocalTime();
                      litDateTimeFrom.Text = date.ToString("dd MMM yy hh:mm tt");
date = DateTime.Parse(dr["EndDateTime"].ToString()).ToLocalTime();
                      litDateTimeTo.Text = date.ToString("dd MMM yy hh:mm tt");
4

1 に答える 1

0

まず、サーバー マシンのタイム ゾーン情報を変更したと仮定します (これがToLocalTimeメソッドで使用されるためです)。そうでない場合は、テストのために最初に行う必要があります。

次に、システムのタイム ゾーンを変更した後、IIS (または Web アプリケーション) を再起動してみましたか? これが必要なのは、タイム ゾーン情報が .NET フレームワーク内 (TimeZoneInfoクラス内) にキャッシュされている可能性があるためです。

私には、これは意味がありません。通常、タイムゾーン情報はユーザー (クライアント) マシンから流れる必要があります。これは、ユーザーのローカル時間を (タイムゾーンに関連して) 表示する必要があるためです。したがって、a) ブラウザーからの文化情報、または b) プロファイル データに保存されているもの (おそらく国または実際のタイム ゾーン) c) 同様のスキームに基づいて、現在のユーザーのタイム ゾーンを把握する必要があることを意味します。ユーザーのタイムゾーンがわかったら、 TimeZoneInfoクラスを使用して UTC 時間を対応する現地時間に変換できます。

于 2013-01-09T11:15:59.930 に答える