Вы можете использовать метод DateTime.ParseExact
(или DateTime.TryParseExact
, чтобы полностью обработать ошибки синтаксического анализа), чтобы выполнить это. Эти методы позволяют явно указать строку формата.
Что-то подобное может работать:
var dateString = "Tue Aug 04 2015 00:17:38 GMT+0000 (UTC)";
var format = "ddd MMM dd yyyy HH:mm:ss GMT+0000 (UTC)";
var parsed = DateTime.ParseExact(
dateString,
format,
System.Globalization.CultureInfo.InvariantCulture);
Или, используя TryParseExact
:
DateTime parsed;
if (DateTime.TryParseExact(
dateString,
format,
System.Globalization.CultureInfo.InvariantCulture,
DateTimeStyles.None,
out parsed)
{
// parsing was successful
}
else
{
// parsing failed
}
Вот разбивка форматной строки используется здесь:
ddd
- сокращенное название дня недели.
MMM
- Сокращенное наименование месяца.
dd
- День месяца с 01 по 31.
yyyy
- год как четырехзначное число.
HH:mm:ss
- час, с использованием 24-часовых часов от 00 до 23; минута, с 00 до 59; а второй - от 0 до 59 (разделены :
символами).
GMT+0000 (UTC)
- только статический текст, который принимает форматная строка, всегда будет присутствовать. Это довольно хрупкое и может привести к сбою вашего синтаксического анализа, если API когда-либо возвращает другой текст здесь. Подумайте об усечении этого текста или используя NodaTime, который предлагает отличную поддержку часовых поясов.
Возможно, вам потребуется немного подправить эту строку формата к вашему использованию - например, из вашего вопроса было неясно, используете ли вы 12-часовое время или 24-часовой часы.
Дополнительные сведения о построении строки формата см. В разделе Custom Date and Time Format Strings на MSDN.
В качестве альтернативы, вы можете отказаться от использования System.DateTime
в пользу NodaTime. Я меньше знаком с NodaTime, но отличная документация доступна как here on StackOverflow, так и на сайте NodaTime.
Предполагая, что это всегда один и тот же формат, как насчет изменения строки в другом формате, прежде чем разбирать ее? – Alkasai
Я имею в виду, конечно, это не невозможно, но это не супер чисто. Я уверен, что есть способ преобразования этого типа вещей в .NET. –