ASP.NET中SQL DateTime绑定TextBox显示不一致问题
解决ASP.NET中DateTime绑定到TextBox显示不一致的问题
问题分析
你的SQL中存储的时间是2023-02-08 16:01:49.153,但TextBox显示为2/8/2023 09:07:13 PM,核心原因有两点:
- 默认
ToString()会使用服务器区域格式,导致显示样式不符合需求 - 存在时区转换问题,数据库时间被自动转换成了服务器本地时区时间
解决方案
方案1:绑定指定精确格式,处理空值
直接在Eval绑定阶段指定与SQL一致的时间格式字符串,同时兼容数据库可能的空值:
<asp:TextBox ID="dateTxt" runat="server" Text='<%# Eval("date") != DBNull.Value ? ((DateTime)Eval("date")).ToString("yyyy-MM-dd HH:mm:ss.fff") : string.Empty %>' class="form-control"> </asp:TextBox>
yyyy-MM-dd对应年-月-日的标准格式HH:mm:ss.fff对应24小时制的时:分:秒.三位毫秒- 用三目运算符处理
DBNull,避免空值转换报错
方案2:禁用时区转换,保留原始时间
默认SqlDataAdapter会将数据库的DateTime转换为服务器本地时区时间,可通过修改连接字符串禁用该转换:
在数据库连接字符串末尾添加;DateTimeKind=Unspecified,示例:
string conStr = "Data Source=你的服务器地址;Initial Catalog=你的数据库名;User ID=账号;Password=密码;DateTimeKind=Unspecified";
添加后读取的DateTime会保留数据库中的原始时间信息,不会被自动转换时区。
方案3:SQL查询时直接格式化返回字符串
修改SQL语句,直接将DateTime字段格式化为目标字符串后返回,绑定阶段直接取值即可:
SELECT CONVERT(varchar, date, 121) AS date FROM ThisTable where stage = 'pending'
CONVERT(varchar, date, 121)会将DateTime转换为yyyy-MM-dd HH:mm:ss.fff格式的字符串- 此时TextBox绑定代码可简化为:
<asp:TextBox ID="dateTxt" runat="server" Text='<%# Eval("date") %>' class="form-control"></asp:TextBox>
内容的提问来源于stack exchange,提问作者toly P
相关产品推荐
相关产品推荐

