Разбор странно отформатированного DateTime.Кто-нибудь придумывает? - PullRequest
4 голосов
/ 30 августа 2010

Я пытаюсь проанализировать метку даты (полученную из Твиттера), но получаю ошибки. вот отметка даты:

Пт, 27 августа 2010 г. 22:00:07 + 0000

Вот мой код:

DateTime.ParseExact (MyDateValue, "ддд, дд МММ ГГГГ ЧЧ: мм: сс + ffff", новое CultureInfo ("en-US"))

и вот моя ошибка:

System.FormatException не обработан Сообщение = строка не была распознана как действительный DateTime.

Кто-нибудь мечтает взять это на себя? Чтобы упростить процесс, я привел приведенный ниже код для консольного приложения, в котором обнаружена проблема.

Спасибо Джейми

using System;
using System.Globalization;

class Program
{
    static void Main(string[] args)
    {
        string MyDateValue = "Fri, 27 Aug 2010 22:00:07 +0000";
        var dt = DateTime.ParseExact(MyDateValue, "ddd, dd MMM YYYY HH:mm:ss +ffff", new CultureInfo("en-US"));

    }
}

Ответы [ 6 ]

9 голосов
/ 30 августа 2010

Указатель года - yyyy, а не YYYY:

string MyDateValue = "Fri, 27 Aug 2010 22:00:07 +0000";
var dt = DateTime.ParseExact(MyDateValue, "ddd, dd MMM yyyy HH:mm:ss +ffff", new CultureInfo("en-US"));

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

Я предполагаючто +0000 в конце строки должен быть указателем часового пояса.Если это так, ffff является неправильным, так как оно обозначает The hundred thousandths of a second, а не спецификатор часового пояса, который равен K.Если это действительно должен быть указатель часового пояса, то это будет правильный код:

string MyDateValue = "Fri, 27 Aug 2010 22:00:07 +0000";
var dt = DateTime.ParseExact(MyDateValue, "ddd, dd MMM yyyy HH:mm:ss K", new CultureInfo("en-US"));

См. Custom Date and Time Format Strings.

0 голосов
/ 30 августа 2010

Часть года должна быть в нижнем регистре: ddd, dd MMM yyyy HH:mm:ss +ffff

0 голосов
/ 30 августа 2010
System.DateTime.ParseExact(MyDateValue, "ddd, dd MMM yyyy HH:mm:ss zzz", new System.Globalization.CultureInfo("en-US"));
0 голосов
/ 30 августа 2010

Я опустил «+0000» и просто использовал DateTime.Parse()

Чтобы добраться до моего реального часового пояса (поскольку +0000, вероятно, смещение от GMT), я также установил это.

string myDateValue = "Fri, 27 Aug 2010 22:00:07"; //get this using substring
int gmtOffset = -6; //I'm in the Central TimeZone
DateTime dt = DateTime.Parse(myDateValue);
dt.AddHours(gmtOffset);

Console.WriteLine(dt.ToString("ddd, dd MMM yyyy hh:mm:ss"));
0 голосов
/ 30 августа 2010

Обратите внимание на изменение в году: ГГГГ-> гггг

DateTime.ParseExact(MyDateValue, "ddd, dd MMM yyyy HH:mm:ss +ffff", new CultureInfo("en-US"))
0 голосов
/ 30 августа 2010

Если ваш YYYY будет yyyy?

Мой файл справки для информации о пользовательском форматировании для DateTime имеет только строчные буквы y, но не прописные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...