Come si fa a convertire una stringa come 2009-05-08 14:40:52,531
in una DateTime
?conversione di una stringa a DateTime
risposta
provare questo
DateTime myDate = DateTime.Parse(dateString);
un modo migliore sarebbe questo:
DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
// handle parse failure
}
Avete fondamentalmente due opzioni per questo. DateTime.Parse()
e DateTime.ParseExact()
.
Il primo è molto indulgente in termini di sintassi e analizzerà le date in molti formati differenti. È utile per l'input dell'utente che può venire in diversi formati.
ParseExact vi permetterà di specificare il formato esatto della stringa 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.
È possibile analizzare l'input dell'utente come questo:
DateTime enteredDate = DateTime.Parse(enteredString);
Se si dispone di un formato specifico per la stringa, è necessario utilizzare l'altro metodo:
DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);
"d"
stand per il modello di data breve (vedi MSDN for more info) e null
specifica che la cultura corrente deve essere utilizzato per l'analisi della stringa.
Dal momento che si sta occupando il tempo a base di 24 ore e si dispone di una virgola che separa la frazione secondi, vi 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);
Buoni occhi. Non ho visto la virgola nell'OP. –
(Penso che intendevi usare una virgola nelle stringhe di data e di formato, però, giusto?) –
Modificato ... Sì, questo è quello che intendevo ... – CMS
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);
Hai perso la parte del tempo? Ho bisogno sia della data che dell'ora, come posso farlo? –
provare il sottostante, dove strDate è tua data in formato 'gg/MM/yyyy'
var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
Nessuno ha detto che funziona solo con quel particolare formato. –
si potrebbe anche usare 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
}
Nessuno sembra aver implementato un metodo di estensione. Con l'aiuto di @CMS's answer:
di lavoro e una migliore esempio sorgente completo è qui: 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)));
}
}
}
uso DateTime.Parse (stringa)
DateTime l_dateTime= DateTime.Parse(dateTimeStr);
Ho appena ricevuto e ho sempre utilizzare
inserire questo codice in una classe 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('-', ':', '-');
Tutti gli importi di cui sopra sono testati
diverse culture nel mondo stringhe di data di scrittura 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, è possibile 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);
@dban Perché una risposta da '@ CMS' non è contrassegnata come risposta? Potrebbe esserci una ragione: sono curioso – nam
Come convertire gg/mm/aaaa in mm/gg/aaaa? – ragu
@nam Utente cancellato il suo account, o è stato bannato, non può cliccarci sopra né vedere reputazione/medaglie. Purtroppo tutto ciò che possiamo fare è dargli un po 'di pollice in su. – YumeYume