Разобрать строку даты из ленты XML в DateTime - PullRequest
3 голосов
/ 16 января 2012

У меня есть несколько разных фидов xml, которые я объединяю в один «фид» для веб-сайта, над которым я работаю (c #). Большинство каналов соответствуют стандарту rss2.0, а именно новостные ленты и фейсбук. Тем не менее, я также вытащил твиттер, и они, кажется, используют свой собственный стандарт из того, что я могу сказать. У меня возникла проблема с переносом даты публикации из Facebook и Twitter, поскольку они имеют несколько разные форматы.

facebook = <lastBuildDate>Thu, 12 Jan 2012 00:06:54 +0000</lastBuildDate>

twitter = <created_at>Wed Jan 11 23:48:15 +0000 2012</created_at>

Я не совсем уверен, с чего начать, спасибо за помощь:)

Ответы [ 2 ]

13 голосов
/ 16 января 2012

Вам нужно будет выполнить DateTime.ParseExact, если формат не распознан.

Используя следующий класс:

public static class Extensions
{
    public static DateTime ParseTwitterDateTime(this string date)
    {
        const string format = "ddd MMM dd HH:mm:ss zzzz yyyy";
        return  DateTime.ParseExact(date, format, CultureInfo.InvariantCulture);
    }

    public static DateTime ParseFacebookDateTime(this string date)
    {
        const string format = "ddd, dd MMM yyyy HH:mm:ss zzzz";
        return  DateTime.ParseExact(date, format, CultureInfo.InvariantCulture);
    }
}

Вы должны быть в состоянии проанализировать значения, используя метод расширения строки.

Используется для справки: Разбор даты в Твиттере на C #

0 голосов
/ 16 января 2012

Если вы знаете, что это, скажем, из Facebook, и facebook постоянно использует один и тот же формат даты, вы можете просто проанализировать строку для ее компонентов (день недели, месяц, время и т. Д.), Перегруппировать их впорядок, который распознает C #, а затем использует DateTime.Parse (), чтобы преобразовать их в дату.Для каждого фида вам понадобится отдельный метод переупорядочения.

например,

Thu, 12 Jan 2012 00:06:54 +0000

становится

Jan 12, 2012 00:06:54 +0000

или что-то в этом роде (не уверен, что C #на самом деле это будет проанализировано, поэтому измените по необходимости).

...