2008-12-03 19 views
6

Las preguntas estúpidas, pero no puedo conseguir mi cabeza alrededor de ella ... tengo una cadena en este formato 20081119cadena a la conversión DateTime en C#

Y tengo un método de C# que convierte la cadena a un DateTime que se introduzcan en una base de datos 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 de esta manera: Fecha = 19/11/2008 12:00:00 am y lo necesito para ser un DateTime de tipo I como AAAAMMDD estoy mapeando en un esquema para llamar a un proceso almacenado.

Gracias de antemano chicos.

Saludos, estafadores

+0

¿dónde ves la fechaTiempo de aaaaMMdd? ¿Qué estás enviando a tu mapeador de biztalk? –

Respuesta

1

Fecha Hora es una clase que, por defecto, los formatos que es como ToString 19/11/2008 12:00:00 AM

Esto es de MSDN que pueden ayudarle a

Debido a la aparición de valores de fecha y hora depende de factores tales como la cultura , estándares internacionales, requisitos de la aplicación, y preferencia personal, la estructura DateTime ofrece una gran cantidad de flexibilidad en la fecha de formato y valores de tiempo a través de las sobrecargas de su método ToString. El método predeterminado DateTime.ToString() devuelve la representación de cadena de una fecha y el valor de tiempo utilizando la fecha corta de la cultura actual y el patrón de tiempo largo. El ejemplo siguiente se utiliza el método predeterminado DateTime.ToString() para mostrar la fecha y la hora usando la fecha corta y patrón de tiempo largo para el cultura en-US, la cultura actual en el equipo en el que fue el ejemplo correr.

Es posible que pueda, por lo tanto, a sobrecargar el ToString en DateTime en el formato deseado, de lo contrario pasar a la representación de cadena directamente al procedimiento correspondiente, en lugar

13

No hay tal cosa como "un DateTime de tipo yyyyMMdd "; 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, entonces sólo tiene que utilizar la cadena directamente como [n] parámetro char [var].

también - en este caso, para analizar la fecha me gustaría utilizar la referencia cultural de todos (ya que la cultura no figura en el formato):

DateTime yourDateTime = 
      DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture); 

De la conversación, parece que también necesite pasar de un DateTime en una cadena, en cuyo caso simplemente revertirla:

string dateString = yourDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture); 
+1

En realidad, debo mencionar que algunos bits están reservados para offsets utc, pero * principalmente * es solo un número entero grande ;-p –

0

estoy pensando que es debido a la cultura establecido en CurrentCulture, sin saber lo que es, no puedo estar seguro, pero especificando en-US funciona en mi extremo. 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 te funciona.

+0

No veo que la cultura afecte el formato anterior ... ya es completamente explícito, con sin place-holders. –

+0

La cultura era la única razón por la que podía ver la fecha y el mes para cambiar de posición ... Era lo único que podía pensar. –

0

Esto es lo que va a dar resultado exacto que está buscando:

convert (varchar (10), getdate(), 112): fecha y hora a la cadena (formato AAAAMMDD)

convertido (fecha y hora, ' 20081203' , 112): cadena de fecha y hora (formato AAAAMMDD)

lado

Código:

DateTimeFormatInfo fmt = (nueva CultureInfo ("h-HR").) DateTimeFormat; Console.WriteLine (thisDate.ToString ("d", fmt)); // Muestra 15.3.2008 (utilizan formatos similares según sus requisitos)

o

date1.ToString ("AAAAMMDD", CultureInfo.CreateSpecificCulture ("en-US")) date1.ToString ("AAAAMMDD ");

detalles en http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+0

Eso cubre el lado de TSQL, pero la pregunta original estaba en el lado de C# –

+0

Compruebe la versión editada – Samiksha

1

Ok, de vuelta a la cultura cosa ... Cuando dice:

la fecha está saliendo de esta manera: Fecha = 12 19/11/2008 : 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.

que era capaz de reproducir el formato de su están recibiendo 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)); 

usted tiene una fecha válida, por lo que el formato no debería importar, pero si lo hace y hay que conseguir que en el formato que describió, luego debe formatearlo al convertir a una cadena ... si ya es una cadena, entonces no hay necesidad de la conversión de fecha.

Podría estar malinterpretando su pregunta, pero tuve que sacarla b/c me estaba molestando.