我对sql server 2008有一个奇怪的问题。我试图将dd/MM/yyyy
格式的日期保存到sql server 2008中,但是在插入日期后它会自动转换为MM/dd/yyyy
。
注意:我的计算机时钟格式为dd/MM/yyyy
我的报告查看器日期文本框属性
我的数据库表中的日期 enter image description here
我的c#代码
lbldate.Text = DateTime.Today.ToShortDateString();
报告日期 2017年5月4日
答案 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")