Sql 如何为所有地区标准化日期时间格式?
在我的程序中,我将当前时间插入到sql server的sql DateTime列中。 因为这个程序被世界各地的用户使用,我发现一些美国用户收到了一个错误(这不会导致程序崩溃),我相信这是因为不同的日期和时间格式 我使用以下代码行获取特定时区中的当前时间,但我知道对于不同的用户,我将获得不同的时间格式。 例如,对于美国用户,我将获得“MM dd yyyy”,而对于欧洲用户,我将获得“dd/MM/yyyy” 在插入到服务器之前,我一直在试图弄清楚如何标准化这种格式。 希望这里有人能帮忙Sql 如何为所有地区标准化日期时间格式?,sql,.net,sql-server,vb.net,datetime,Sql,.net,Sql Server,Vb.net,Datetime,在我的程序中,我将当前时间插入到sql server的sql DateTime列中。 因为这个程序被世界各地的用户使用,我发现一些美国用户收到了一个错误(这不会导致程序崩溃),我相信这是因为不同的日期和时间格式 我使用以下代码行获取特定时区中的当前时间,但我知道对于不同的用户,我将获得不同的时间格式。 例如,对于美国用户,我将获得“MM dd yyyy”,而对于欧洲用户,我将获得“dd/MM/yyyy” 在插入到服务器之前,我一直在试图弄清楚如何标准化这种格式。 希望这里有人能帮忙 谢谢 日期的
谢谢 日期的显示是一个UI问题。从日期到文本以及从文本到日期的转换应该在用户当前区域性的UI上完成,或者强制通过 所有的业务逻辑和数据库都不应该依赖于用户文化或时区。在您的情况下,最好将所有内容都存储为UTC
如果您开始存储小时,您将很快看到每个国家都有不同的DLS,这会变得多么混乱。大概您将日期时间值存储为UTC值(
GetUTCDate()
vs.GetDate()
)。
理想情况下,如果您至少使用SQL Server 2008,您应该使用datetime 2
而不是datetime
作为SQL字段类型
如果本地时区中有DateTime变量,则可以在将其存储到SQL Server之前使用以下命令将其转换为UTC:
还要注意链接的MSDN页面上关于XP的警告
检索UTC值时,可以使用以下方法对本地计算机的时区进行时区调整:
要获得DateTime字符串的正确格式,您应该能够使用DateTime.ToString()
。这将使用线程的当前区域性:
Console.WriteLine(localDateTime.ToString())
如果愿意,您可以通过以下方式手动覆盖:
它更可能与您如何向这些用户显示日期有关。约会只是一个很长的值,对美国佬、英国人和德国人来说都是一样的。它的显示方式因当地文化而异。如果在程序中转换为字符串,很可能就是问题所在。这不是sql server设置吗?这取决于sql server的区域设置。我不能完全肯定。不确定sql server的区域设置与运行.net应用程序的计算机之间的差异是否也会导致问题。不过,我给了您一些探索的途径。:)
对于不同的用户,我会得到不同的时间格式
事实上,不同的用户会看到相同日期的不同格式时间-除了存储日期,你不必做任何事情<代码>日期。ToString将根据每个用户的本地设置显示日期。VS将以本地格式向您显示日期。
dim localDateTime as DateTime
dim storedDateTime as DateTime
localDateTime = DateTime.Now
storedDateTime = localDateTime.ToUniversalTime()
Dim storedDateTime as DateTime
Dim localDateTime as string
storedDateTime = (DateTime)reader[Timestamp"]
localDateTime = myDateTime.ToLocalTime()
Console.WriteLine(localDateTime.ToString())
Dim germanCultureInfo As New CultureInfo("de-DE")
Console.WriteLine(localDateTime.ToString(germanCultureInfo))