0

これはC#にあります

RSS フィードのデータを使用していて、そのデータをデータベースに保存したいと考えています。私が抱えている問題は、LastUpdateTime を保存する方法です。

XmlReader reader = XmlReader.Create(uri);
SyndicationFeed rssFeed = SyndicationFeed.Load(reader);

var lastUpdate = rssFeed.LastUpdatedTime;

問題は、rssFeed.LastUpdateTime が DateTimeOffset であることです。ただし、DateTime しかない SQL Server 2005 を使用しています。このシナリオを処理するためのベスト プラクティスは何ですか? それが重要な場合、すべてのデータベースとサーバーは東部時間です.

ありがとう。

4

2 に答える 2

2

rssFeed.LastUpdateTime.UtcDateTime を使用して DateTimeOffset を UTC DateTime に変換し、それをデータベースの DateTime フィールドに保存するのが最も簡単です。

わざわざオフセットを保存する必要はありません。とにかく、オフセットは DateTime 値をどのタイムゾーンにも関連付けません。

次に、.NET に組み込まれている TimeZoneInfo クラスを使用して、UTC DateTime 値を任意のタイム ゾーンに変換できます。TimeZoneInfo クラスの優れた点は、夏時間に合わせて DateTime 値も調整することです。

これは、パフォーマンスとストレージの点でも最適なソリューションです。

于 2012-10-11T23:17:06.383 に答える
1

私は通常、次のような追加の列を持っています

[LastUpdateOffset] SMALLINT NOT NULL

それを使用して、指定された行のオフセットを格納します。次に、クライアント用に変換します。

/// <summary>
/// Convert a given UTC DateTime value into its localized value from given offset
/// </summary>
/// <param name="column">DateTime value, such as CreatedOn, UpdatedOn etc</param>
/// <param name="offset">-60 is DST for example</param>
private void ConvertUTCToClientTimeZone(DateTime column, int offset)
{
    TimeSpan offsetTimeSpan = new TimeSpan(0, offset, 0).Negate();
    DateTimeOffset newDate = new DateTimeOffset(column, offsetTimeSpan);
    column = newDate.DateTime;
}

お役に立てれば!:)

于 2012-07-12T19:40:32.267 に答える