No se puede convertir el valor de fecha/hora de MySQL al Sistema.DateTime


Recibo este error:

No se puede convertir el valor de fecha/hora de MySQL al Sistema.DateTime

Mientras estoy tratando de obtener los datos de una base de datos MySQL. Tengo el tipo de datos date en mi base de datos MySQL. Pero mientras lo recupera en mi datatable, obtiene el error anterior.

¿Cómo puedo arreglar esto?

Author: Marc Mutz - mmutz, 2011-04-22

8 answers

Si busco en Google "No se puede convertir el valor de fecha/hora de MySQL al Sistema.DateTime " Veo numerosas referencias a un problema para acceder a MySQL desde Visual Studio. ¿Ese es tu contexto?

Una solución sugerida es:

Esto no es un error, pero se espera comportamiento. Por favor revise el manual bajo conectar opciones y establecer " Permitir cero Datetime " a verdadero, como en adjunto imágenes, y el error desaparecerá.

Referencia: http://bugs.mysql.com/bug.php?id=26054

 42
Author: dkretz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-22 18:25:53

Debe agregar Convert Zero Datetime=True a su cadena de conexión, por ejemplo:

server=localhost;User Id=root;password=mautauaja;Persist Security Info=True;database=test;Convert Zero Datetime=True
 167
Author: agni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-27 08:49:52

He añadido ambos Convert Zero Datetime=True & Allow Zero Datetime=True y funciona bien

 17
Author: Kiddo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-01 05:47:41

Baje el valor datetime como una cadena y haga un DateTime.ParseExact(value, "ddd MMM dd hh:mm:ss yyyy", culture, styles); Solo necesitará configurar el formato de fecha para la fecha que está regresando de la base de datos. Lo más probable es yyyy-MM-dd HH:mm:ss. Al menos es para mí.

Consulta aquí más información sobre el DateTime.ParseExact

 3
Author: Tim Meers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-22 17:55:27

Deje que MySQL convierta su marca de tiempo unix en cadena. Utilice la función mysql FROM_UNIXTIME (113283901)

 2
Author: Jakob Alexander Eichler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-22 11:16:20

También me enfrenté al mismo problema, y obtener el nombre de las columnas y sus tipos. Luego cast (col_Name como Char) desde el nombre de la tabla. De esta manera obtengo el problema como '0000-00-00 00:00:00' luego actualizo como fecha y hora válidas el error se escapa para mi caso.

 1
Author: Singaravelan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-12 11:41:28

Puede hacer que la aplicación sea totalmente compatible con la fecha y hora que utiliza MySQL. Cuando la aplicación se ejecuta en tiempo de ejecución, proporcione este código. Primero vaya a los Eventos de la aplicación. En la lista de herramientas

  1. Ir al proyecto
  2. Propiedades del proyecto
  3. Seleccione la pestaña Aplicación
  4. Ver Eventos de la aplicación

Esto abrirá un nuevo archivo. Este archivo contiene el código utilizado al inicio de la aplicación.

Escriba este código en ese nuevo archivo:

 Partial Friend Class MyApplication

    Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
        My.Application.ChangeCulture("en")
        My.Application.ChangeUICulture("en")
        My.Application.Culture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"
        My.Application.Culture.DateTimeFormat.LongTimePattern = "HH:mm:ss"
        My.Application.Culture.DateTimeFormat.ShortTimePattern = "HH:mm:ss"
    End Sub


End Class
 1
Author: KHALID,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-19 19:15:21

En lugar de cambiar la cadena de conexión, puede usar la propiedad IsValidDateTime del objeto MySqlDateTime para ayudarlo a determinar si puede convertir el objeto como DateTime.

Tuve un escenario en el que estaba tratando de cargar datos de una columna "UpdateTime" que solo se estableció explícitamente cuando había una actualización de la fila (a diferencia de InsertedTime que siempre se estableció). Para este caso, usé el método MySqlDataReader.GetMySqlDateTime así:

using (MySqlDataReader reader = await MySqlHelper.ExecuteReaderAsync(...))
{
    if (await reader.ReadAsync())
    {
        DateTime? updateTime = reader.GetMySqlDateTime("UpdateTime").IsValidDateTime ? (DateTime?)reader["UpdateTime"] : null;
    }
}
 0
Author: P Walker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-22 05:16:49