为什么最新版本的mysql网络连接器中的日期格式与我的项目不同?

问题描述 投票:0回答:1
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 变量

vb.net date format mysql-connector
1个回答
0
投票

要理解的重要一点是日期值内部根本不使用人类可读的格式。相反,它们使用“二进制”格式,该格式对于存储/内存使用、排序/索引和操作(例如添加/减去天/小时/月/等)非常有效。 由于文化/国际化问题,这些二进制日期值和字符串之间的转换比您想象的要复杂得多,这使得它成为一个缓慢且容易出错的操作:应尽可能避免和延迟。

因此,在内部,您的应用程序应该使用类型化的日期/日期时间值,而不是字符串。您希望尽快将输入转换为日期时间值,并尽可能长时间地保留该值。然后,仅在“最后可能的时刻”转换为字符串,然后再向用户展示以导出到外部系统或文件,并且“此时只需担心格式”。

这是相关的,因为 ADO.Net 非常乐意直接从 MySQL 为您提供 .Net DateTime 值,无论您使用什么连接器版本。您应该让它这样做,甚至不用担心数据库上的日期格式。 也就是说,当您调用 ExecuteScalar() 时,请

NOT

对结果调用

ToString()

。相反,将结果分配给真正的

DateTime
变量(如果需要,可以使用 DirectCast)。稍后输出 DateTime 变量的值时请注意格式。只要 MySQL 为您提供 DateTime 列而不是 varchar 列,无论使用哪个连接器版本,这
都会
解决您的问题。
    

© www.soinside.com 2019 - 2024. All rights reserved.