Estoy tratando de convertir mi valor con formato de cadena a tipo de fecha con formato dd/MM/yyyy
.
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
Cuál es el problema ? Tiene una segunda anulación que pide IFormatProvider
. ¿Que es esto? ¿ Necesito pasar esto también? En caso afirmativo, ¿cómo usarlo para este caso?
Editar
¿Cuáles son las diferencias entre Parse
y ParseExact
?
Editar 2
Ambas respuestas de Slaks y Sam están funcionando para mí, actualmente el usuario está dando la entrada pero esto me asegurará que son válidas usando maskTextbox.
Qué respuesta es mejor teniendo en cuenta todos los aspectos, como la seguridad de tipografía, el rendimiento o algo que te parezca
Respuestas:
Uso
DateTime.ParseExact
.fuente
dd/MM/yyyy
para que una cadena de texto con un tiempo no se analice correctamente. Deberá quitar el tiempo o incluirlo en el patrón de formato. Hay una sobrecargaParseExact
que acepta una variedad de patrones de formato y analizará el texto si coincide con alguno de ellos.CultureInfo.InvariantCulture
lugar del actual si está definiendo un formato de todos modos?Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
, romperá tu solución. Para arreglar eso, use"dd'/'MM'/'yyyy"
(protegiendo las barras con comillas simples), o@"dd\/MM\/yyyy"
("escapando" de las barras con barras invertidas).Debe llamar
ParseExact
, lo que analiza una fecha que coincide exactamente con el formato que proporciona.Por ejemplo:
El
IFormatProvider
parámetro especifica la cultura a utilizar para analizar la fecha.A menos que su cadena provenga del usuario, debe pasar
CultureInfo.InvariantCulture
.Si la cadena proviene del usuario, debe pasar
CultureInfo.CurrentCulture
, que utilizará la configuración que el usuario especificó en Opciones regionales en el Panel de control.fuente
using System.Globalization;
Analizar una representación de cadena de un DateTime es algo complicado porque las diferentes culturas tienen diferentes formatos de fecha. .Net conoce estos formatos de fecha y los extrae de su cultura actual (
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat
) cuando llamaDateTime.Parse(this.Text)
;Por ejemplo, la cadena "22/11/2009" no coincide con ShortDatePattern para los Estados Unidos (en-US) pero sí con Francia (fr-FR).
Ahora, puede llamar
DateTime.ParseExact
y pasar en la cadena de formato exacta que espera, o puede pasar una cultura apropiadaDateTime.Parse
para analizar la fecha.Por ejemplo, esto analizará su fecha correctamente:
Por supuesto, no solo debes elegir al azar Francia, sino algo apropiado para tus necesidades.
Lo que necesita saber es qué
System.Threading.Thread.CurrentThread.CurrentCulture
está configurado y si / por qué difiere de lo que espera.fuente
Aunque las soluciones anteriores son efectivas, también puede modificar el archivo webconfig con lo siguiente ...
Ref: formato de fecha y hora diferente en la máquina local en comparación con la máquina de producción
fuente
Es posible que deba especificar la cultura para ese formato de fecha específico como en:
Para más detalles ir aquí:
http://msdn.microsoft.com/en-us/library/5hh873ya.aspx
fuente
Después de pasar mucho tiempo, he resuelto el problema.
fuente
use esto para convertir cadenas a fecha y hora:
fuente
Basado en esta referencia , el siguiente enfoque funcionó para mí:
fuente
fuente
Al igual que alguien anterior dijo que puede enviarlo como un parámetro de cadena, pero debe tener este formato: '20130121', por ejemplo, y puede convertirlo a ese formato tomándolo directamente del control. Entonces lo obtendrá, por ejemplo, de un cuadro de texto como:
para convertirlo a: '20130121' usa:
para que SQL pueda convertirlo y ponerlo en su base de datos.
fuente
Puedes usar también
fuente
Me funcionó debajo del código:
Espacio de nombres
fuente
Cambiar manualmente:
A partir del 22/11/2015 se convertirá en 22/11/2015
fuente