Элемент<pubdate> в RSS-канале XML-рендеринга смещен как Z вместо +0000

У меня есть настройка RSS-канала с использованием библиотеки System.ServiceModel.Syndication. Класс SyndicationItem в той же библиотеке используется для визуализации элемента и его подузлов для каждого сообщения в RSS-каналах. Тем не менее, элемент в моей ленте, как показано ниже (см. Снимок экрана ниже).

Мой текущий канал

Как вы можете видеть, моя публикация показывает Z как смещение, но я хочу, чтобы он показывал +0000, потому что мы хотим интегрировать инструмент Emailbroadcast с нашим RSS-каналом, который требует, чтобы мой канал был совместимым с 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;            
}

0 ответов

Другие вопросы по тегам