System.Threading.Thread.CurrentThread.CurrentCulture=System.Globalization.CultureInfo.CreateSpecificCulture("es-DO")
System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern = "dd'/'MM'/'yyyy"
我的应用程序开头有这些代码行
Public Function BFecha_Servidor() As Boolean
Using conn = ConexionADO.ObtenerConeccion()
conn.Open()
Dim MysqlCommand As New MySql.Data.MySqlClient.MySqlCommand("SELECT curdate()", conn)
Fecha_Servidor = MysqlCommand.ExecuteScalar().ToString
End Using
Return True
End Function
为什么使用 mysql Net Connector 6.9.4 时,我会得到“dd/MM/yyyy”格式的日期,因为我在应用程序中设置了它,但使用 mysql Net Connector 8.0.30 时,我会得到“MM/dd/yyyy”格式的日期“?
这是为什么呢? 我该如何解决?
我尝试更改服务器的排序规则,但它不起作用(尽管我不知道我是否做对了),现在我要尝试使用 lc_time_names 变量
要理解的重要一点是日期值内部根本不使用人类可读的格式。相反,它们使用“二进制”格式,该格式对于存储/内存使用、排序/索引和操作(例如添加/减去天/小时/月/等)非常有效。 由于文化/国际化问题,这些二进制日期值和字符串之间的转换比您想象的要复杂得多,这使得它成为一个缓慢且容易出错的操作:应尽可能避免和延迟。
因此,在内部,您的应用程序应该使用类型化的日期/日期时间值,而不是字符串。您希望尽快将输入转换为日期时间值,并尽可能长时间地保留该值。然后,仅在“最后可能的时刻”转换为字符串,然后再向用户展示以导出到外部系统或文件,并且“此时只需担心格式”。
这是相关的,因为 ADO.Net 非常乐意直接从 MySQL 为您提供 .Net DateTime 值,无论您使用什么连接器版本。您应该让它这样做,甚至不用担心数据库上的日期格式。
也就是说,当您调用 ExecuteScalar()
时,请
对结果调用
ToString()
。相反,将结果分配给真正的
DateTime
变量(如果需要,可以使用 DirectCast)。稍后输出 DateTime
变量的值时请注意格式。只要 MySQL 为您提供 DateTime 列而不是 varchar 列,无论使用哪个连接器版本,这都会解决您的问题。