Sql server 2008强制日期从dd / MM / yyyy到MM / dd / yyyy

时间:2017-05-04 13:27:39

标签: c# sql .net sql-server-2008

我对sql server 2008有一个奇怪的问题。我试图将dd/MM/yyyy格式的日期保存到sql server 2008中,但是在插入日期后它会自动转换为MM/dd/yyyy

注意:我的计算机时钟格式为dd/MM/yyyy

我的报告查看器日期文本框属性

enter image description here

我的数据库表中的日期 enter image description here

我的c#代码

lbldate.Text = DateTime.Today.ToShortDateString();

报告日期 2017年5月4日

3 个答案:

答案 0 :(得分:1)

SQL Server是数据层,因此没有可用的格式;它将日期存储为4字节数,相对于0 = 01/01/1900的天数。

应用层 DateTime类型通常是 ODBC Canonical 表示,它基本上看起来像一个具有每个组件的整数属性的类(年,月,日期) ,小时,分钟,秒,毫秒)。

表示层是您实际看到的,这是您应该关注的地方。当您的应用程序调用{​​{1}}方法时,它会从当前文化的线程调用显示格式,这可能会也可能不会反映 Region&的系统设置。语言日期&时间

第一个解决方案是设置线程当前文化,但这只会转到特定的文化标准显示

ToShortDateString()

解决方案编号2只是使用自定义DateTime格式字符串

Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

答案 1 :(得分:0)

您所看到的是查询工具如何呈现结果,并且没有与Sql Server如何存储数据有关。 Sql Server实际上以二进制(不可读)格式存储日期。

这是一件好事。让Sql Server存储日期(和其他数据)的方式。您只需要担心在检索数据后如何向用户显示数据,并且大多数情况下担心格式化的最佳位置甚至根本不在服务器中,而是用您的客户端语言。

答案 2 :(得分:0)

我不会说这是一个"问题"可以这么说。这就是SQL处理日期的方式。您的计算机时钟格式无关紧要。要更改格式,请在查询中使用CONVERT。例如:

SELECT CONVERT(varchar, GETDATE(), 103)

Results: 04/05/2017

SELECT CONVERT(varchar, GETDATE(), 101)

Results: 05/04/2017

此处列出了代码页参数:https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

根据您的新更新进行编辑:您的C#应如下所示:

DateTime.Now.ToString("dd/mm/yyy")