C# string to datetime 格式输出错误

C# string to datetime wrong format output

我正在尝试将字符串转换为日期时间格式,这是我的代码

CultureInfo culture = new CultureInfo("da-DK");
DateTime endDateDt = DateTime.ParseExact("05-02-2015 15:00", "dd-MM-yyyy HH:mm", culture);
Response.Write(endDateDt);

这是输出结果

2/5/2015 3:00:00 PM

我正在寻找的输出应该是

05-02-2015 15:00

我做错了什么?

您没有格式化 DateTime 对象的字符串表示形式。如果您没有指定格式,那么您将获得基于当前文化的默认格式

要获得所需的输出,您可以试试这个:

endDateDt.ToString("dd-MM-yyyy HH:mm");

让我们更深入一点..

Response.Write method doesn't have an overload for DateTime, that's why this calls Response.Write(object) overload. And here how it's implemented;

public virtual void Write(Object value)
{
     if (value != null)
     {
          IFormattable f = value as IFormattable;
          if (f != null)
              Write(f.ToString(null, FormatProvider));
          else
              Write(value.ToString());
     }
}

由于DateTime实现了IFormattable接口,这将生成

f.ToString(null, FormatProvider)

因此。来自 DateTime.ToString(String, IFormatProvider) overload.

If format is null or an empty string (""), the standard format specifier, "G", is used.

看起来你的 CurrentCulture's ShortDatePattern is M/d/yyyy and LongTimePatternh:mm:ss tt,这就是你得到 2/5/2015 3:00:00 PM 结果的原因。

作为解决方案,您可以使用 .ToString() 方法获取 DateTime 的字符串表示形式,并提供使用 HttpResponse.Write(String) 重载来获得准确表示形式的方法。

Response.Write(endDateDt.ToString("dd-MM-yyyy HH:mm", CultureInfo.InvariantCulture));