C#日期格式与Windows日期格式



得到一个SQL Server数据库,该数据库有一个表,列类型为"Date"。

在Visual Studio中通过SQL Server对象资源管理器对表进行选择时,字段的值返回为"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显示为";2016年1月17日。。而不是预期的";2016年1月17日";

我也试过:

string dateString = ((DateTime)reader[columnName]).ToString("MM/dd/yyyy");
string dateString = String.Format("{0:MM/dd/yyyy}", (reader[columnName]));

但两者都得出了相同的结果;2016年1月17日";没有正斜杠。

我做的最后一个测试是将字段转换为一个没有格式的字符串,结果是";1月17日星期日12:00:00 AM":

string val = reader[columnName].ToString();

^^我正要问你们到底发生了什么,然后我想起几天前我更改了我的Windows7日历;短日期";格式为";ddd-MMM-dd";(即单击系统中的日历并更改日期/时间设置(。

我不希望用户的windows日期/时间格式影响日期和时间在C#或SQL Server代码中的显示功能(这会导致许多依赖格式的东西中断(。

我能做些什么来防止这个问题?

在日期格式字符串中,"/"不是文字字符,而是表示区域设置的"日期分隔符";。

显然,在您的区域设置中,日期分隔符是一个空格。

根据链接的文档,您可以用单引号对其进行转义,以获得文字斜杠:

string dateString= String.Format("{0:MM'/'dd'/'yyyy}",((DateTime)reader[columnName]));

(它导致许多依赖格式的东西中断(。

无论如何,这都很糟糕——应该将形式和函数分开。固定后,您可以很高兴地以用户最熟悉的形式和他们期望的形式向用户显示日期。

最新更新