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

C# Date Format vs. Windows Date Format

获得了一个 SQL 服务器数据库,有一个 table,其中有一列类型为 'Date'。

当通过 SQL Server Object Explorer 在 table 上执行 select 时 Visual Studio 字段的值 returns 为 '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”格式"(即单击系统托盘中的日历并更改 date/time 设置)。

我不希望用户的 windows date/time 格式影响日期和时间在我的 C# 或 SQL 服务器代码中的显示功能(它导致了一些要打破依赖于格式的东西)。

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

date format string, "/" is not a literal character, but instead represents the locale's "date separator".

显然,在您的语言环境中,日期分隔符是 space。

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

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

(its causing a number of things to break that rely on formatting).

无论如何,这很糟糕 — 您应该将形式和功能分开。修复后,您可以愉快地以用户最熟悉的形式以及他们期望的形式向用户显示日期。