todatetime - parse string to date c#
Convertir una cadena a DateTime (12)
Básicamente tienes dos opciones para esto. DateTime.Parse()
y DateTime.ParseExact()
.
El primero es muy indulgente en términos de sintaxis y analizará las fechas en muchos formatos diferentes. Es bueno para la entrada del usuario que puede venir en diferentes formatos.
ParseExact le permitirá especificar el formato exacto de la cadena de fecha que se usará para el análisis. Es bueno usar esto si su cadena está siempre en el mismo formato. De esta manera, puede detectar fácilmente cualquier desviación de los datos esperados.
Puede analizar la entrada del usuario de esta manera:
DateTime enteredDate = DateTime.Parse(enteredString);
Si tiene un formato específico para la cadena, debe usar el otro método:
DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);
"d"
representa el patrón de fecha corta (consulte MSDN para obtener más información ) y null
especifica que la cultura actual debe usarse para analizar la cadena.
¿Cómo convertir una cadena como 2009-05-08 14:40:52,531
en un DateTime
?
Dado que está manejando un tiempo basado en 24 horas y tiene una coma que separa la fracción de segundos, le recomiendo que especifique un formato personalizado:
DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
System.Globalization.CultureInfo.InvariantCulture);
Diferentes culturas en el mundo escriben cadenas de fecha de diferentes maneras. Por ejemplo, en los EE. UU. 20/01/2008 es el 20 de enero de 2008. En Francia, se lanzará una excepción InvalidFormatException. Esto se debe a que Francia lee las fechas y los días como Día / Mes / Año, y en los Estados Unidos es Mes / Día / Año.
En consecuencia, una cadena como el 20/01/2008 se analizará hasta el 20 de enero de 2008 en Francia y luego lanzará una InvalidFormatException en los Estados Unidos.
Para determinar su configuración de cultura actual, puede 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);
Intente lo siguiente, donde strDate es su fecha en formato ''MM / dd / aaaa''
var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
Nadie parece implementar un método de extensión. Con la ayuda de la respuesta de @ CMS :
El ejemplo de fuente completa de trabajo y mejorado está aquí: 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)));
}
}
}
Probé varias maneras. Lo que funcionó para mí fue esto:
Convert.ToDateTime(data, CultureInfo.InvariantCulture);
data
para mí fueron tiempos como este 24/09/2017 9:31:34 AM
También puede usar DateTime.TryParseExact () como se muestra a continuación si no está seguro del valor de entrada.
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
}
prueba esto
DateTime myDate = DateTime.Parse(dateString);
Una mejor manera sería esta:
DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
// handle parse failure
}
usar DateTime.Parse (cadena)
DateTime dateTime= DateTime.Parse(dateTimeStr);
Coloque este código en una clase 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();
}
}
De esta manera, puede utilizar
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(''-'', '':'', ''-'');
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);