1

データベースの日付/時刻データは、タイム ゾーン付きの Oracle タイム スタンプ (02-FEB-2013 13:25:00 US/PACIFIC) として格納されます。データを読み取るとき、この時間とユーザーの現在の現地時間との差を判断する必要があります。上記を使用して、ユーザーの現地時間オフセットを取得できます。

OracleTimeStampTZ dtzLastActivity = new OracleTimeStampTZ(dr["LAST_ACTIVITY_TZ"].ToString());
TimeSpan tsOffset = dtzLastActivity.GetTimeZoneOffset();

おそらくTimeZoneInfoを使用して、オフセットのみを知っているので、現地時間からデータベースの時間を差し引いて差を得ることができますか?

4

1 に答える 1

1

US/PacificWindows タイム ゾーン ID ではなく、IANA/Olsonタイム ゾーン ID です。TimeZoneInfoしたがって、クラスを使用することはできません。

代わりに、 NodaTimeなどの TZDB 実装を使用してください。これらのタイプのタイムゾーンを完全に認識しており、探しているタイプの計算を実行できます。

ところで-US/Pacific実際にはのエイリアスとしてAmerica/Los_Angeles。これらのタイム ゾーンのリストは、こちらで確認できます。

アップデート

申し訳ありませんが、あなたが使用していることを見落としていOracleTimeStampTZました。これすでに TZDB を実装しているように見えるので、直接使用できるはずです。次のことを試してください。

var span = DateTime.UtcNow - dtzLastActivity.ToUniversalTime().Value;
于 2013-03-04T18:39:54.733 に答える