2009-11-26 84 views
2

这让我真的很失落!.NET DateTime对象字符串格式

  1. 在数据层ADO.NET连接到SQL Server 2008,用于登录的默认语言是“英国”
  2. 选择日期时间列到一个数据视图,并返回它。
  3. aspx页databinds
  4. 此:<%#的String.Format( “{0:MMM/YYYY}”,评估和演示( “dbPeriodFrom”))%>

数据库返回10分之2009/ 01(这是yyyy/MM/dd) 第4步的结果是Jan2009?

Web服务器的区域设置是英国 有在machine.config中 没有<全球化...节在IIS中NET全球化设置的UICulture = EN文化= EN-GB 我甚至把它在该网站的web.config

这是一个经典的“在我的开发机器上工作..”但是,当部署到生产场景borked。 我可能错过了什么?

编辑

所以它出现在ASP.NET应用程序中使用的登录连接到SQL Server 2008是得到一个美国的日期时间,即使在登录属性,默认语言设置为'英式英语'。

的问题发生在TSQL:

SELECT 
    DATEPART(month, CAST('2009.02.01' AS DATETIME)) 
    ,DATEPART(month, CONVERT(DATETIME, '2009.02.01', 102)) 

输出,用于默认语言Windows集成登录(管理员)设置为 '英语'

输出通过使用SQL Server登录默认语言设置为“英式英语”的ASP.NET

+0

您的编辑似乎是倒退的问题。你问过关于获取系统的日期*,但是你的编辑显示你将日期*放在*中 - 这是完全不同的,而btw * still *不应该使用字符串文字。 – 2009-11-26 16:08:24

回答

2

检查数据库本身及其服务器上的区域设置,具体取决于设置,日期将根据区域设置进行格式化。我怀疑数据库服务器可能设置为美国英语 - 在数据库服务器本身的区域设置中打开。

希望这会有所帮助, 最好的问候, 汤姆。

+0

我查过了,它是正确的。英国。 – 2009-11-26 13:32:03

+0

好的,这可以被消除...是在返回日期的sproc中的代码 - 在SQL Management Studio中运行它并查看你得到的结果。如果您获得了预期格式的日期,那么问题就在前端。希望这有助于HollyStyles。 – t0mm13b 2009-11-26 13:34:32

+0

我已经做到了。不过,我这次又做了一次ASP.NET连接的用户连接。我得到了不同的输出。该登录的默认语言设置为英语英语。这不是一个NT帐户,它是一个SQl服务器登录。 – 2009-11-26 14:29:51

2

我很希望看到你在哪里得到的日期所对应的命令/读卡器/适配器的代码 - 如果数据库列的类型是datetime,那么什么过来电线不是实际上是“2009/10/01“ - 这是一个二进制数字(像大多数日期都在线上)。因此没有歧义。

我预计你正在把它当作一个字符串(可能是一些Parse) - 这不应该是必要的。如果是,则不是SELECT,而是datetime,而是[n][var]char(x)

+0

它是select中的SQL Datetime并保持不变,ADO代码使用SqlAdapter填充DataTable并返回它的默认视图。我知道在线日期时间是自startdate之后的秒数。日期时间我从来没有遇到过这么多麻烦,这很奇怪。 – 2009-11-26 13:18:57

+0

在DataTable中,列有哪些数据类型?约会时间?或字符串? – 2009-11-26 16:02:00

0

使用Management Studio检查存储在数据库中的值。另外在MS SQL Server中,通用格式的日期是YYYY-MM-DDTHH:MM:SS.mmm(2009-01-05T10:12:55.001)和YYYYMMDD(20090105)。无论数据库使用哪种语言环境,这些解析的格式总是相同的。