tryparseexact - string format c# fecha
cadena a la conversión de DateTime en C# (5)
Date Time es una clase que, de forma predeterminada, da formato a ToString como 19/11/2008 12:00:00 AM
Esto es de MSDN que puede ayudarte
Debido a que la apariencia de los valores de fecha y hora depende de factores tales como cultura, estándares internacionales, requisitos de aplicación y preferencia personal, la estructura DateTime ofrece una gran flexibilidad en el formato de valores de fecha y hora mediante las sobrecargas de su método ToString. El método predeterminado DateTime.ToString () devuelve la representación de cadena de un valor de fecha y hora utilizando la fecha corta del cultivo actual y el patrón de tiempo largo. El siguiente ejemplo usa el método predeterminado DateTime.ToString () para mostrar la fecha y la hora usando el patrón de fecha corta y larga duración para la cultura en-US, la cultura actual en la computadora en la que se ejecutó el ejemplo.
Por lo tanto, es posible que sobrecargue ToString en DateTime al formato deseado, de lo contrario, pase la representación de cadena directamente al procedimiento almacenado en su lugar
Preguntas estúpidas pero no entiendo bien ... Tengo una cadena en este formato 20081119
Y tengo un método de C # que convierte la cadena a DateTime para ser ingresada en un DB de SQL Server
public static DateTime MyDateConversion(string dateAsString)
{
return System.DateTime.ParseExact(dateAsString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
}
El problema es que la Fecha está saliendo así: Fecha = 19/11/2008 12:00:00 AM y necesito que sea un DateTime de tipo aaaaMMdd ya que estoy mapeando en un esquema para llamar a un proceso almacenado.
Gracias de antemano chicos.
Saludos, Con
Esto es lo que dará el resultado exacto que está buscando:
convert (varchar (10), getdate (), 112): datetime en cadena (formato AAAAMMDD)
convert (datetime, ''20081203'', 112): cadena a fecha y hora (formato AAAAMMDD)
Lado del código:
DateTimeFormatInfo fmt = (nuevo CultureInfo ("hr-HR")). DateTimeFormat; Console.WriteLine (thisDate.ToString ("d", fmt)); // Muestra 15.3.2008 (utilice formatos similares según sus requisitos)
o
date1.ToString ("YYYYMMDD", CultureInfo.CreateSpecificCulture ("en-US")) date1.ToString ("YYYYMMDD");
Detalles en http://msdn.microsoft.com/en-us/library/az4se3k1.aspx
Estoy pensando que es debido a la cultura establecida en CurrentCulture, sin saber qué es eso, no puedo estar seguro, pero especificar en-US funciona de mi parte. Aquí está el código que tengo:
var dateString = "20081119";
var enUS = new System.Globalization.CultureInfo("en-US");
var resultingDate = DateTime.ParseExact(dateString,"yyyyMMdd",enUS);
Console.WriteLine(resultingDate.ToString());
Pruébalo y mira si funciona para ti.
No existe tal cosa como "un DateTime de tipo aaaaMMdd"; un DateTime es solo un número entero grande, que indica la cantidad de tiempo en una época; no tiene un formato. Pero eso está bien, ya que deberías usar TSQL parametrizado de todos modos, así que simplemente agrega DateTime como el valor de un DbParameter, y se entregará al db de una manera no ambigua (no uses concatenación de cadenas para construir un comando TSQL )
DbParameter param = cmd.CreateParameter();
param.ParameterName = "@foo";
param.DbType = DbType.DateTime;
param.Value = yourDateTime; // the DateTime returned from .ParseExact
cmd.Parameters.Add(param);
o para un SqlCommand
:
cmd.Parameters.Add("@foo", SqlDbType.DateTime).Value = yourDateTime;
Si realmente necesita una cadena, simplemente use la cadena directamente como un parámetro [n] [var] char.
Además, en este caso, para analizar la fecha, utilizaría la cultura invariante (ya que la cultura no aparece en el formato):
DateTime yourDateTime =
DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture);
A partir de la conversación, parece que también debería pasar de un DateTime a una cadena, en cuyo caso simplemente inviértala:
string dateString = yourDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture);
Ok, volviendo a lo de la cultura ... Cuando dices:
la fecha está saliendo así: Fecha = 19/11/2008 12:00:00 AM
Supongo que está ejecutando un ToString en la fecha para ver este resultado. El formato en ToString variará según la cultura y usará su cultura actual de forma predeterminada.
Pude reproducir el formato que estás obteniendo al hacer esto:
var dateString = "20081119";
var fr = new System.Globalization.CultureInfo("fr-FR");
var resultingDate =DateTime.ParseExact(dateString,"yyyyMMdd",System.Globalization.CultureInfo.CurrentCulture);
Console.WriteLine(resultingDate.ToString(fr));
Tiene una fecha válida, por lo que el formato no debería importar, pero si lo hace y necesita obtenerlo en el formato que describió, entonces debe formatearlo al convertirlo en una cadena ... si ya es una cadena, entonces no hay necesidad de la conversión de fecha.
Podría estar malinterpretando su pregunta, pero tenía que sacar esto b / c, me estaba molestando.