Извините, но вы кажетесь жертвой мусора, мусора .
Это необычный формат, поэтому прежде чем я предлагаю решениедля вас первое, что я хочу сказать: «Сначала исправьте ввод, если вы можете ».
Допустим, вы не можете исправить ввод, а затем вынужно учесть несколько вещей;
- Прежде всего, если в вашей строке есть такие части, как
UTC
и / или GMT
, не существует специального спецификатора формата даты и времени для их анализа. Вот почему вы должны экранировать их как строковый литерал . См. Этот вопрос для получения более подробной информации. . - Во-вторых, ваша
+1
деталь выглядит как UTC Offset . Спецификатор формата "z"
- это то, что вам нужно для его анализа, но будьте осторожны, этот спецификатор формата не рекомендуется для использования со значениями DateTime
, так как не делаетt отражает значение свойства Kind
экземпляра .
В качестве решения для DateTime
вы можете проанализировать его, как я бы предложил;
var s = "2019-09-23T08:34:00UTC+1";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy-MM-dd'T'HH:mm:ss'UTC'z", CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal, out dt))
{
Console.WriteLine(dt);
}
, который дает 2019-09-23 07:34:00
как DateTime
и который имеет Utc
как Kind
свойство.
Как решение для DateTimeOffset
- поскольку ваша строка имеет UTCЗначение смещения, которое вы должны рассмотреть для анализа, а не Datetime
- как заметил Мэтт , вы можете использовать его .DateTime
свойство , чтобы получить такие данные как;
var s = "2019-09-23T08:34:00UTC+1";
DateTimeOffset dto;
if(DateTimeOffset.TryParseExact(s, "yyyy-MM-dd'T'HH:mm:ss'UTC'z", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dto))
{
Console.WriteLine(dto.DateTime);
}
, который дает тот же результат DateTime
, но Unspecified
как свойство .Kind
.
Но, опять же, я настоятельно предлагаюсначала исправить ввод.