C#string到datetime错误的格式输出

时间:2015-02-14 16:37:32

标签: c# parsing datetime formatting

我试图将字符串转换为Datetime格式,这是我的代码

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

我做错了什么?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

让我们走得更远..

Response.Write方法没有DateTime的重载,这就是调用Response.Write(object) overload的原因。在这里它是如何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

  

如果格式为null或空字符串(“”),则使用the standard format specifier, "G"

您的CurrentCultureShortDatePattern M/d/yyyyLongTimePattern似乎是h:mm:ss tt,这就是您获得2/5/2015 3:00:00 PM的原因。

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

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