0

SQL データベースの私のデータは次のようになります。

PubDateUTC              PubDateUTCOffset
----------------------- --------------------
2011-08-04 10:02:50.000 +8:00:00
2012-04-23 02:32:25.287 +8:00:00
2010-09-26 04:23:00.000 +8:00:00

私が欲しいのは、たとえば、PubDateUTCPubDateUTCOffsetに基づいて DateTime を取得することです。

2011-08-04 10:02:50.000、+8:00:002011-08-04 18:02:50:000になります

TimeZoneInfo クラスを試してみましたが、「+8:00:00」のような文字列を使用して TimeZoneInfo のインスタンスを作成する方法がわかりません。これは、以下の CreateTimeZoneInfo メソッドになります。

var tz = CreateTimeZoneInfo(post.PubDateUTCOffset);
return TimeZoneInfo.ConvertTimeFromUtc(post.PubDateUTC, tz);

とにかくこれを行うことはありますか?

注: SQL データベースのデータを変更できません。

4

4 に答える 4

0

postクラスを変更して、1 つのプロパティを持つようにする必要があります。

public DateTimeOffset Published { get; set; }

次に、データベースから読み取る場合(データベースにdatetimevarcharタイプがあると仮定します):

DateTime utc = DateTime.SpecifyKind(
                       (DateTime) reader["PubDateUTC"], DateTimeKind.Utc);

TimeSpan offset = TimeSpan.Parse(
                       ((string) reader["PubDateUTCOffset"]).Replace("+", ""))

post.Published = new DateTimeOffset(utc).ToOffset(offset);

次に、それを消費する必要がある場合、 full のすべてのオプションがありますDateTimeOffset

DateTime local = post.Published.DateTime;  // with your offset applied

DateTime utc = post.Published.UtcDateTime; // the original utc value

string s = post.Published.ToString("o");   //  2011-08-04T18:02:50.0000000+08:00
于 2013-09-10T12:58:40.733 に答える