Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何为所有地区标准化日期时间格式?_Sql_.net_Sql Server_Vb.net_Datetime - Fatal编程技术网

Sql 如何为所有地区标准化日期时间格式?

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” 在插入到服务器之前,我一直在试图弄清楚如何标准化这种格式。 希望这里有人能帮忙 谢谢 日期的

在我的程序中,我将当前时间插入到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))