Conversione di una stringa in DateTime

Come si converte una stringa come 2009-05-08 14:40:52,531 in un DateTime ?

Poiché stai gestendo il tempo basato su 24 ore e hai una virgola che separa la frazione dei secondi, ti consiglio di specificare un formato personalizzato:

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

Hai fondamentalmente due opzioni per questo. DateTime.Parse() e DateTime.ParseExact() .

Il primo è molto indulgente in termini di syntax e analizzerà le date in molti formati diversi. È utile per l’input dell’utente che può venire in diversi formati.

ParseExact ti permetterà di specificare il formato esatto della tua stringa di data da utilizzare per l’analisi. È utile usarlo se la tua stringa è sempre nello stesso formato. In questo modo, puoi facilmente rilevare eventuali deviazioni dai dati previsti.

Puoi analizzare l’input dell’utente in questo modo:

 DateTime enteredDate = DateTime.Parse(enteredString); 

Se hai un formato specifico per la stringa, dovresti usare l’altro metodo:

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

"d" sta per lo schema di data breve (vedi MSDN per maggiori informazioni ) e null specifica che la cultura corrente deve essere utilizzata per analizzare la stringa.

prova questo

 DateTime myDate = DateTime.Parse(dateString); 

un modo migliore sarebbe questo:

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

Nessuno sembra aver implementato un metodo di estensione. Con l’aiuto della risposta @ CMS :

Qui c’è un esempio di lavoro completo e migliorato: 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))); } } } 

Prova qui sotto, dove strDate è la tua data nel formato ‘MM / gg / aaaa’

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

Convert.ToDateTime o 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); 

È anche ansible utilizzare DateTime.TryParseExact () come di seguito se non si è sicuri del valore di 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 } 

Ho provato vari modi. Ciò che ha funzionato per me è stato questo:

 Convert.ToDateTime(data, CultureInfo.InvariantCulture); 

data per me sono stati orari come questo in data 9/24/2017 alle 21:31:34

usa DateTime.Parse (stringa)

 DateTime dateTime= DateTime.Parse(dateTimeStr); 

Diverse culture nel mondo scrivono le stringhe di data in modi diversi. Ad esempio, negli Stati Uniti il ​​20 gennaio 2008 è il 20 gennaio 2008. In Francia, questo genererà un’eccezione InvalidFormatException. Questo perché la Francia legge le date come giorno / mese / anno e negli Stati Uniti è mese / giorno / anno.

Di conseguenza, una stringa come 20/01/2008 analizzerà il 20 gennaio 2008 in Francia e quindi genererà una InvalidFormatException negli Stati Uniti.

Per determinare le impostazioni cultura correnti, puoi utilizzare 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); 

Inserisci questo codice in una class statica > 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(); } } 

In questo modo, puoi usare

 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('-', ':', '-');