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 回答