【问题标题】:.NET DateTime object string format.NET DateTime 对象字符串格式
【发布时间】:2009-11-26 12:40:27
【问题描述】:

这让我很困惑!

  1. 在数据层 ADO.NET 连接到 SQL Server 2008,登录的默认语言是“英国”
  2. 在数据视图中选择一个 DateTime 列并将其返回。
  3. aspx 页面数据绑定
  4. 这个:

数据库返回 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

【问题讨论】:

  • 您的编辑似乎倒退了问题。您询问了获取系统 out 的日期,但您的编辑显示您将日期 in - 这是完全不同的,顺便说一句 still 应该'不要使用字符串文字。

标签: c# asp.net iis globalization


【解决方案1】:

检查数据库本身及其服务器上的区域设置,根据设置,日期将根据区域设置进行格式化。我怀疑数据库服务器可能设置为美国英语 - 在数据库服务器本身的区域设置中四处寻找。

希望这会有所帮助, 最好的祝福, 汤姆。

【讨论】:

  • 好的,可以消除...是存储过程中返回日期的代码 - 在 SQL Management Studio 中运行它,看看你得到了什么。如果您以预期的格式获取日期,那么问题出在前端。希望这对 HollyStyles 有所帮助。
  • 我已经这样做了。然而,这次我又做了一次,我以 ASP.NET 用来连接的用户身份连接。我得到不同的输出。登录的默认语言设置为英式英语。这不是 NT 帐户,而是 SQl 服务器登录。
【解决方案2】:

我有兴趣查看您从命令/阅读器/适配器中获取日期的代码 - 如果数据库列键入为 datetime,那么通过电线不会 实际上是“2009/10/01” - 它是一个二进制数(就像大多数日期都在线上一样)。因此没有歧义。

我希望 somewhere 你将它视为一个字符串(也许是一些Parse) - 这不应该是必要的。如果是,您不是 SELECT 将其作为 datetime,而是作为 [n][var]char(x)

【讨论】:

  • 这是一个 SQL Datetime 在 select 中保持不变,ADO 代码使用 SqlAdapter 填充 DataTable 并返回它的默认视图。我了解在线日期时间是自某个开始日期以来的秒数。我从来没有在日期时间方面遇到过这么多麻烦,这太奇怪了。
  • 在DataTable中,列有什么数据类型?约会时间?还是字符串?
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多