C # Синтаксический анализ в формате гггг-ММ-ддТЧЧ: мм: сс Строка не была распознана как допустимый DateTime - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь разобрать Mon, 11 Mar 2019 09:13:16 +0100 до 2019-03-11T09:13:16

string dataa = "Mon, 11 Mar 2019 09:13:16 +0100";
DateTime d = new DateTime();
d = DateTime.ParseExact(dataa,"yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine("data: "+d);

Но ошибка такова:

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

Существует ли какой-либо метод для автоматического анализа? Спасибо всем.

Ответы [ 2 ]

6 голосов
/ 12 марта 2019

Когда вы используете ParseExact, ваша строка и формат должны соответствовать точно .

Правильный формат: ddd, d MMM yyyy hh:mm:ss zzz (или HH, который зависит от вашего часового формата)

После того, как вы проанализируете его, вам нужно использовать ToString, чтобы отформатировать его в формате yyyy-MM-dd'T'hh:mm:ss (или HH, в зависимости от того, что вы хотите 12-часовые часы или 24-часы формат)

Я думаю, мне нужно добавить немного больше объяснений, которые смущают многие люди (особенно новички в программировании).A DateTime экземпляр не имеет какой-либо формат.Он просто имеет значения даты и времени, которые в основном являются числовыми значениями, называемыми Ticks.Когда вы говорите о понятии «формат», это указывает на текстовое представление , которое string.

Поскольку вы сказали "Mon, 11 Mar 2019 09:13:16 +0100 to 2019-03-11T09:13:16", я (и, вероятно, также многие люди) предполагаю, что у вас есть строка как Mon, 11 Mar 2019 09:13:16 +0100, и вы хотите получить 2019-03-11T09:13:16 как строкуот него.Для этого вам нужно сначала проанализировать вашу строку в DateTime.Для этого, как и вы, ParseExact является одним из вариантов.

Когда вы анализируете его в DateTime, вы получаете текстовое представление , что составляет string, с ToString метод.Этот метод имеет несколько перегрузок, и вы должны использовать ToString(String, IFormatProvider) перегрузка .При этом вы указываете выходной формат в качестве первого параметра, а свою информацию о культуре - в качестве второго параметра, который может влиять на строку результата из-за спецификаторов формата : и /, так как они могутизменение в зависимости от текущей культуры или поставляемой культуры.

Дополнительная информация: Строки формата даты и времени

2 голосов
/ 12 марта 2019

Вам необходимо указать формат входных данных (второй параметр DateTime.ParseExact).В вашем случае предоставленные вами данные имеют формат ddd, d MMM yyyy hh:mm:ss zzz.Кроме того, в последней строке, где вы печатаете результат, вы должны отформатировать его.

Итак, вот как вы должны это сделать:

string dataa = "Mon, 11 Mar 2019 09:13:16 +0100";
DateTime d = new DateTime();
d = DateTime.ParseExact(dataa, "ddd, d MMM yyyy hh:mm:ss zzz", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine("data: " + d.ToString("yyyy-MM-dd'T'hh:mm:ss"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...