Как преобразовать строку в любом формате в DateTime - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть DateTime как string с различными форматами в Excel.Я хочу преобразовать формат string в DateTime, используя c #.но я получаю следующее исключение:

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

DateTimeOffset.Parse("09/20/2019 17:25:59");

Ожидается:

09/20/2019 17: 25: 59

Фактический:

System.FormatException

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Прежде всего, не существует универсального формата , поскольку представления даты неоднозначны , классический пример:

 01/02/03 == 2 Jan 2003 (USA)  
 01/02/03 == 1 Feb 2003 (Russia) 
 01/02/03 == 3 Feb 2001 (China) 

Если у вас есть коллекция ожидаемых форматов, вы можете попробовать ParseExact, например

 string[] possibleFormats = new[] {
   "MM'/'dd'/'yyyy HH:mm:ss",   // USA
   "dd'.'MM'.'yyyy HH:mm:ss",   // Russia
   "yyyy'-'MM'-'dd HH:mm:ss",   // China
   "yyyy'-'MM'-'dd'T'HH:mm:ss", // ISO 8601
 };

 string value = @"09/20/2019 17:25:59";

 DateTimeOffset result = DateTimeOffset.ParseExact(
   value, 
   possibleFormats, 
   CultureInfo.InvariantCulture, 
   DateTimeStyles.AssumeLocal);
1 голос
/ 24 сентября 2019

Вы можете использовать DateTime.ParseExact Документ здесь

var dateThatDesired = DateTime.ParseExact("09/20/2019 17:25:59","MM/dd/yyyy HH:mm:ss",CultureInfo.InvariantCulture);

Если у вас ограниченное количество форматов в таблице Excel, вы можете проверить их с помощью DateTime.TryParseExact(), а при возврате с помощьюв случае успеха вы можете использовать проанализированный dateTime, который вы получите с параметром out.

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