sql - 字符串未被识别为数据集中的有效日期时间

标签 sql asp.net .net

我有一个来自 SQL 服务器的数据集,它在 aspx 页面上绑定(bind)了 gridview。我使用以下代码在网页上发布日期:

<asp:Label ID="Label10" runat="server" Text='<%# Convert.ToDateTime(Eval("date1")).ToString("yyyy/MM/dd")  %>' 

SQL 服务器上的日期时间是 2015-12-06 00:00:00.000,在网页上显示为 2015/06/12。正确的日期应该是 2015/12/06(2015 年 12 月 6 日)。我在 webconfig 上有全局化。
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US"/>

谁能告诉我如何解决这个问题?

最佳答案

SQL Server 应该将日期保留为以下类型之一,并且永远不会作为其他任何东西(我指的是 varchartextintBigInt 或其他任何“创意”)

  • DateTime2
  • DateTime
  • Date
  • DateTimeOffset

  • 更多类型请引用Date and Time Data Types and Functions (Transact-SQL)

    因此,SQL Server 中的显示应该永远不会重要,因为没有与该类型关联的实际显示或格式。您碰巧在 SSMS 的查询窗口中看到的内容确实具有格式,但只是因为它必须以某种方式显示,这种格式通常以 ISO8601 表示法完成,与实例的实际持久化方式无关。

    来自 Sql Server 的 .NET 代码中返回的实例应该是 System.DateTime 类型。或 System.DateTimeOffset , 后者如果你也在使用 DateTimeOffset在 Sql Server 中,它与实例保持 UTC 的偏移量。然后您可以使用 ToString()使用各种格式选项来显示您认为合适的日期时间。 DateTime 如何显示/格式化应该始终是一个表示层函数,并且永远不会比程序堆栈中的更深。

    Custom Date and Time Format Strings对于 .net DateTime 实例可用的各种格式字符串选项

    回到 OP 中的相关代码
    <asp:Label Text='<%# Convert.ToDateTime(Eval("date1")).ToString("yyyy/MM/dd") %>' 
    
    Convert.ToDateTime应作为变量 date1 删除应该 已经是 DateTime实例(如果您遵循上述最佳实践)。然后您可以调用ToString在该实例上直接使用所需的格式字符串。

    关于sql - 字符串未被识别为数据集中的有效日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39623226/

    相关文章:

    sql - 将时间戳字段的分钟和秒组件设置为 0

    asp.net - 通过 web.config 授权仅允许匿名用户

    c# - 确定我在数组中的位置

    sql - 仅使用 SQL 返回 pre-UPDATE 列值

    SQL Server 自动舍入?

    mysql - MySQL 中的 UNION ALL 性能不佳

    c# - .NET 构建和部署

    c# - 如何为 ASP.net Core 配置 Entity Framework 6

    c# - 在 LINQ 查询中使用动态数据类型

    c# - 为什么这个C#程序会输出这样的结果?怎么理解闭包?