2012-07-18 31 views
5

A pesar de que parece que este pregunta se ha hecho un montón de veces, me parece que no puede encontrar una respuesta que es específico a mi pregunta:la conversión de una cadena de fecha y hora a partir de "aaaa-MM-dd"

Tengo una variable que se lee de un archivo XML mediante un analizador XML de C#. Es una cadena y está en el formato "yyyy-MM-dd". Me gustaría leer esta variable en nuestra base de datos usando SQL, pero tiene que estar en el formato de fecha y hora correcto para poder hacer esto. Lamentablemente, no puedo encontrar ningún formato de fecha y hora para "yyyy-MM-dd". ¿Me estoy perdiendo de algo?

Preferiría poder convertir la variable a datetime antes de tener que abrir mi conexión SQL, si es posible.

+0

¿Está escribiendo una instrucción SQL, utilizando un procedimiento almacenado, utilizando LINQ2SQL, NHibernate? También es extraño que te estés quejando del formato ya que aaaa-MM-dd está cerca o al formato exacto de las fechas de SQL. –

+1

@EricH yyyy-MM-dd no siempre funciona. Intenta 'CONFIGURAR EL IDIOMA FRANCÉS; SELECT CONVERT (DATETIME, '2012-07-18'); ' –

+0

Tengo una cadena en formato" aaaa-MM-dd ", y solo quiero poder cargar eso como una variable SQL de fecha y hora. ¿Cómo puedo hacer eso? El resto lo puedo entender, pienso ahora. – weskpga

Respuesta

15

Preferiría poder convertir la variable a datetime antes de que I tenga que abrir mi conexión SQL, si es posible.

DateTime result = DateTime.ParseExact("2012-04-05", "yyyy-MM-dd", CultureInfo.InvariantCulture); 
1

Tal función ParseExact puede ayudar.

DateTime dResult = DateTime.ParseExact("2012-07-18", "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); 
1

Si está utilizando LINQ to XML, sólo tiene que emitir el elemento o atributo a DateTime:

DateTime date = (DateTime) element; 

A continuación, puede insertarla en su base de datos utilizando SQL parametrizada. Yo discutiría contra La sugerencia de Aaron: siempre que sea posible, mantenga sus datos en su forma más natural, que en vainilla .NET es un DateTime. Cuanto más tiempo pueda guardar datos en una representación significativa, mejor será la OMI.

Si usted no está utilizando LINQ to XML, entonces las soluciones de Smink y Riera están bien - pero yo encarecidamente que animo a utilizar LINQ to XML si posiblemente puede :)

1

en el servidor SQL que puede utilizar la consulta
SELECT CONVERT (VARCHAR (10), GETDATE(), 120) AS [AAAA-MM-DD]

0

Si no está seguro de que funcionará puede utilizar "TryParseExact". Si funciona, el "éxito" será cierto. De esta forma no está arriesgándose a una excepción de análisis.

DateTime timestamp; 
bool success = DateTime.TryParseExact("2015-12-25", "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out timestamp); 
Cuestiones relacionadas