我使用System.ServiceModel.Syndication库设置了我的 RSS 提要。同一个库中的SyndicationItem类用于呈现项目,它是 RSS 提要中每个帖子的子节点。但是,我的提要中的元素如下所示(请参阅下面的屏幕截图)。
如您所见,我的 pubdate 将Z显示为偏移量,但我希望它显示 +0000,因为我们希望将 Emailbroadcast 工具与我们的 RSS Feed 集成,这需要我的 Feed 与 RFC 882 兼容。我继续调试了我扩展的PublicFeed类(Sitecore CMS 需要添加额外的字段)。在调试期间,我看到syndicationItem.publishDate的偏移值为 +0000,但未呈现到我的最终提要中。将不胜感激一些帮助。下面是呈现日期的代码。
private void RenderDate(Item item, FeedRenderingParameters feedParams, SyndicationItem syndicationItem)
{
DateTime universalTime = DateUtil.ToUniversalTime(DateUtil.IsoDateToDateTime(item[feedParams.DateField], DateTime.MaxValue));
if (universalTime == DateTime.MaxValue)
{
string logWarning = "RSS couldn't parse date from the '{0}' field on the {1} item. Using item updated date instead.";
Log.Warn(logWarning, (object)this);
universalTime = DateUtil.ToUniversalTime(item.Statistics.Updated);
}
DateTimeOffset dateTimeOffset;
try
{
if (universalTime == DateTime.MinValue)
dateTimeOffset = DateTimeOffset.MinValue;
else if (universalTime == DateTime.MaxValue)
{
dateTimeOffset = DateTimeOffset.MaxValue;
}
else
{
DateTime serverTime = DateUtil.ToServerTime(universalTime);
dateTimeOffset = new DateTimeOffset(serverTime, Settings.ServerTimeZone.GetUtcOffset(serverTime));
}
}
catch (ArgumentOutOfRangeException ex)
{
DateTime serverTime = DateUtil.ToServerTime(DateTime.UtcNow);
dateTimeOffset = new DateTimeOffset(serverTime, Settings.ServerTimeZone.GetUtcOffset(serverTime));
}
syndicationItem.PublishDate = dateTimeOffset;
}