如何解决C#日期格式与Windows日期格式
获得一个SQL Server数据库,该数据库具有一个表,该表的列类型为“日期”。
通过Visual Studio中的SQL Server Object Explorer在表上进行选择时,该字段的值返回为'2016-01-17',这是正确的。
但是从C#进行操作
cmd = new System.Data.SqlClient.SqlCommand("SELECT * FROM MyTable WHERE id = '" + id + "';",conn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
string dateString= String.Format("{0:MM/dd/yyyy}",((DateTime)reader[columnName]));
}
dateString出来的是“ 01 17 2016” ..不是预期的“ 01/17/2016”
我也尝试过:
string dateString = ((DateTime)reader[columnName]).ToString("MM/dd/yyyy");
string dateString = String.Format("{0:MM/dd/yyyy}",(reader[columnName]));
但是两者的结果都是相同的“ 01 17 2016”,没有正斜杠。
我做的最后一项测试只是将字段转换为不带格式的字符串,结果为“ Sun Jan 17 12:00:00 AM”:
string val = reader[columnName].ToString();
^^我正要问你们到底是怎么回事,然后我想起几天前,我将Windows 7日历“短日期”更改为“ ddd MMM dd”的格式(即单击日历系统托盘并更改日期/时间设置。
我不希望用户的Windows日期/时间格式影响我的C#或SQL Server代码中日期和时间显示方式的功能(它会导致很多事情依赖于格式设置)。
我该怎么做才能防止此问题?
解决方法
在date format string中,"/"
不是文字字符,而是代表the locale's "date separator"。
显然,在您的语言环境中,日期分隔符是一个空格。
根据链接的文档,您可以使用单引号将其转义以得到文字斜杠:
string dateString= String.Format("{0:MM'/'dd'/'yyyy}",((DateTime)reader[columnName]));
(它导致许多依赖格式的操作中断)。
那仍然很不好-您应该将形式和功能分开。修复此问题后,您可以以用户最熟悉的格式和期望的格式向用户显示日期。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。