Convertendo uma String em DateTime

Como você converter uma seqüência de caracteres como 2009-05-08 14:40:52,531 em um DateTime ?

Como você está lidando com o tempo de 24 horas e tem uma vírgula separando a fração de segundo, recomendo que você especifique um formato personalizado:

 DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture); 

Você tem basicamente duas opções para isso. DateTime.Parse() e DateTime.ParseExact() .

O primeiro é muito tolerante em termos de syntax e analisa datas em muitos formatos diferentes. É bom para a input do usuário, que pode vir em diferentes formatos.

ParseExact permitirá que você especifique o formato exato de sua string de data a ser usada para análise. É bom usar isso se sua string estiver sempre no mesmo formato. Dessa forma, você pode detectar facilmente quaisquer desvios dos dados esperados.

Você pode analisar a input do usuário assim:

 DateTime enteredDate = DateTime.Parse(enteredString); 

Se você tem um formato específico para a string, você deve usar o outro método:

 DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null); 

"d" representa o padrão de data abreviada (consulte o MSDN para obter mais informações ) e null especifica que a cultura atual deve ser usada para analisar a cadeia de caracteres.

tente isso

 DateTime myDate = DateTime.Parse(dateString); 

uma maneira melhor seria esta:

 DateTime myDate; if (!DateTime.TryParse(dateString, out myDate)) { // handle parse failure } 

Ninguém parece ter implementado um método de extensão. Com a ajuda da resposta do @ CMS :

Exemplo de trabalho completo e aprimorado está aqui: Gist Link

 namespace ExtensionMethods { using System; using System.Globalization; public static class DateTimeExtensions { public static DateTime ToDateTime(this string s, string format = "ddMMyyyy", string cultureString = "tr-TR") { try { var r = DateTime.ParseExact( s: s, format: format, provider: CultureInfo.GetCultureInfo(cultureString)); return r; } catch (FormatException) { throw; } catch (CultureNotFoundException) { throw; // Given Culture is not supported culture } } public static DateTime ToDateTime(this string s, string format, CultureInfo culture) { try { var r = DateTime.ParseExact(s: s, format: format, provider: culture); return r; } catch (FormatException) { throw; } catch (CultureNotFoundException) { throw; // Given Culture is not supported culture } } } } namespace SO { using ExtensionMethods; using System; using System.Globalization; class Program { static void Main(string[] args) { var mydate = "29021996"; var date = mydate.ToDateTime(format: "ddMMyyyy"); // {29.02.1996 00:00:00} mydate = "2016 3"; date = mydate.ToDateTime("yyyy M"); // {01.03.2016 00:00:00} mydate = "2016 12"; date = mydate.ToDateTime("yyyy d"); // {12.01.2016 00:00:00} mydate = "2016/31/05 13:33"; date = mydate.ToDateTime("yyyy/d/M HH:mm"); // {31.05.2016 13:33:00} mydate = "2016/31 Ocak"; date = mydate.ToDateTime("yyyy/d MMMM"); // {31.01.2016 00:00:00} mydate = "2016/31 January"; date = mydate.ToDateTime("yyyy/d MMMM", cultureString: "en-US"); // {31.01.2016 00:00:00} mydate = "11/شعبان/1437"; date = mydate.ToDateTime( culture: CultureInfo.GetCultureInfo("ar-SA"), format: "dd/MMMM/yyyy"); // Weird :) I supposed dd/yyyy/MMMM but that did not work !?$^&* System.Diagnostics.Debug.Assert( date.Equals(new DateTime(year: 2016, month: 5, day: 18))); } } } 

Experimente o abaixo, onde strDate é a sua data no formato ‘MM / dd / aaaa’

 var date = DateTime.Parse(strDate,new CultureInfo("en-US", true)) 

Convert.ToDateTime ou DateTime.Parse

 string input; DateTime db; Console.WriteLine("Enter Date in this Format(YYYY-MM-DD): "); input = Console.ReadLine(); db = Convert.ToDateTime(input); //////// this methods convert string value to datetime ///////// in order to print date Console.WriteLine("{0}-{1}-{2}",db.Year,db.Month,db.Day); 

Você também pode usar DateTime.TryParseExact () como abaixo se não tiver certeza do valor de input.

 DateTime outputDateTimeValue; if (DateTime.TryParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out outputDateTimeValue)) { return outputDateTimeValue; } else { // Handle the fact that parse did not succeed } 

Eu tentei de várias maneiras. O que funcionou para mim foi isso:

 Convert.ToDateTime(data, CultureInfo.InvariantCulture); 

data para mim foi momentos como este 24/09/2017 09:31:34

use DateTime.Parse (string)

 DateTime dateTime= DateTime.Parse(dateTimeStr); 

Diferentes culturas no mundo escrevem strings de data de maneiras diferentes. Por exemplo, nos EUA, 20/01/2008 é 20 de janeiro de 2008. Na França, isso gerará um InvalidFormatException. Isso ocorre porque a França lê as datas como dia / mês / ano e nos EUA é mês / dia / ano.

Conseqüentemente, uma sequência como 20/01/2008 será analisada em 20 de janeiro de 2008 na França e, em seguida, lançará um InvalidFormatException nos EUA.

Para determinar suas configurações de cultura atuais, você pode usar System.Globalization.CultureInfo.CurrentCulture.

 string dateTime = "01/08/2008 14:50:50.42"; DateTime dt = Convert.ToDateTime(dateTime); Console.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}", dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond); 

Coloque este código em uma class estática > public static class ClassName{ }

 public static DateTime ToDateTime(this string datetime, char dateSpliter = '-', char timeSpliter = ':', char millisecondSpliter = ',') { try { datetime = datetime.Trim(); datetime = datetime.Replace(" ", " "); string[] body = datetime.Split(' '); string[] date = body[0].Split(dateSpliter); int year = date[0].ToInt(); int month = date[1].ToInt(); int day = date[2].ToInt(); int hour = 0, minute = 0, second = 0, millisecond = 0; if (body.Length == 2) { string[] tpart = body[1].Split(millisecondSpliter); string[] time = tpart[0].Split(timeSpliter); hour = time[0].ToInt(); minute = time[1].ToInt(); if (time.Length == 3) second = time[2].ToInt(); if (tpart.Length == 2) millisecond = tpart[1].ToInt(); } return new DateTime(year, month, day, hour, minute, second, millisecond); } catch { return new DateTime(); } } 

Desta forma, você pode usar

 string datetime = "2009-05-08 14:40:52,531"; DateTime dt0 = datetime.TToDateTime(); DateTime dt1 = "2009-05-08 14:40:52,531".ToDateTime(); DateTime dt5 = "2009-05-08".ToDateTime(); DateTime dt2 = "2009/05/08 14:40:52".ToDateTime('/'); DateTime dt3 = "2009/05/08 14.40".ToDateTime('/', '.'); DateTime dt4 = "2009-05-08 14:40-531".ToDateTime('-', ':', '-');