.NET DateTime 对象字符串格式
这让我真的很困惑!
- 在数据层中,ADO.NET 连接到 SQL Server 2008,登录的默认语言是“英国”
- 选择数据视图中的日期时间列并返回它。
- aspx 页面数据绑定
- 如下: <%# String.Format("{0:MMM/yyyy}", Eval("dbPeriodFrom")) %>
数据库返回 2009/10/01(这是 yyyy/MM/dd) 第 4 步的结果是 Jan2009 ????
网络服务器的区域设置为英国 machine.config 中没有
这是一个经典的“在我的开发机器上工作......”但是,在部署到生产场景时感到厌烦。 我可能错过了什么?
编辑
因此,ASP.NET 应用程序用于连接到 SQl Server 2008 的登录名似乎正在获取美国日期时间,即使在登录名的属性中,默认语言设置为“英式英语” '。
该问题出现在 TSQL 中:
SELECT
DATEPART(month, CAST('2009.02.01' AS DATETIME))
,DATEPART(month, CONVERT(DATETIME, '2009.02.01', 102))
Windows 集成登录(管理员)的输出,默认语言设置为“英语”
2 2
ASP.NET 使用的 SQL Server 登录输出,默认语言设置为“英式英语”
1 2
This has got me really flumoxed!
- In the datalayer ADO.NET connects to SQL Server 2008, Default language for the login is 'british'
- Selects a DateTime column into a dataview and returns it.
- aspx page databinds
- this: <%# String.Format("{0:MMM/yyyy}", Eval("dbPeriodFrom")) %>
The database returns 2009/10/01 (This is yyyy/MM/dd)
The result of step 4 is Jan2009 ????
The regional settings of the web server is United Kingdom
There is no <globalization... section in machine.config
The NET globalisation in IIS is set to uiCulture=en culture=en-GB
I even set it in the web.config for the site
This is a classic "Works on my dev machine.." But, borked when deployed to production scenario.
What could I possibly have missed?
EDIT
So it appears the login used by the ASP.NET Application to connect to SQl Server 2008 is getting a US datetime, even though in the properties for the login, the default language is set to 'British English'.
The problem occurs in TSQL:
SELECT
DATEPART(month, CAST('2009.02.01' AS DATETIME))
,DATEPART(month, CONVERT(DATETIME, '2009.02.01', 102))
OUTPUT for windows integrated login (Administrator) with default language set to 'English'
2 2
OUTPUT for SQL Server login used by ASP.NET with default language set to 'British English'
1 2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
检查数据库本身及其服务器上的区域设置,根据设置,日期将根据区域设置进行格式化。我怀疑数据库服务器可能设置为美国英语 - 在数据库服务器本身的区域设置中查看。
希望这有帮助,
此致,
汤姆.
Check the locale setting on the database itself and on their server, depending on the set up, the date will be formatted accordingly to the locale setting. I suspect the database server is probably set up to US English - Poke around in the regional settings on the db server itself.
Hope this helps,
Best regards,
Tom.
我有兴趣查看从命令/读取器/适配器获取日期的代码 - 如果数据库列输入为
日期时间
,那么通过网络传输的内容是实际上是“2009/10/01”——它是一个二进制数(就像大多数日期一样)。因此,没有任何歧义。我希望您在某个地方将其视为字符串(也许是一些
Parse
) - 这应该不是必需的。如果是,则您不是将其SELECT
作为日期时间
,而是作为[n][var]char(x)
。I'd be interested in seeing the code where you get the date out of the command/reader/adapter - if the database column is typed as a
datetime
, then what comes over the wire isn't actually "2009/10/01" - it is a binary number (like most dates are on the wire). As such there is no ambiguity.I expect that somewhere you are treating it as a string (perhaps some
Parse
) - this shouldn't be necessary. If it is, you aren'tSELECT
ing it as adatetime
, but as a[n][var]char(x)
.使用 Management Studio 检查数据库中存储的值。另外,在 MS SQL Server 中,日期的通用格式为 YYYY-MM-DDTHH:MM:SS.mmm (2009-01-05T10:12:55.001) 和 YYYYMMDD (20090105)。无论数据库使用哪种语言环境,解析的这些格式始终相同。
Check value stored in database using Management Studio. Also in MS SQL server universal format of date is YYYY-MM-DDTHH:MM:SS.mmm (2009-01-05T10:12:55.001) and YYYYMMDD (20090105). Those formats parsed always the same, no matter which locale used by database.