string to dateTime约定更改字符串

时间:2017-09-14 11:31:20

标签: c# asp.net datetime

我的代码就像这样

 DateTime dt = new DateTime();
 dt=  DateTime.ParseExact("14/09/2017", "dd/MM/yyyy", CultureInfo.InvariantCulture);

我希望dt的格式为dd / MM / yyyy,但我得到的输出是MM / dd / yyyy格式。 这是我得到的正确的输出9/14/2017 12:00:00 AM。  谁能指出我在这里做错了什么?

3 个答案:

答案 0 :(得分:2)

如果您希望在显示"dd/MM/yyyy"时需要指定格式DateTime。为此,您可以使用ToString方法的重载:

dt.ToString("dd/MM/yyyy");

它自己的DateTime没有格式。只有它的字符串表示有一个。

修改

Tim Schmelter的重要评论:

/是一个自定义格式说明符,它用本地日期分隔符替换所有出现的情况。您要么必须将它们嵌入'中,要么使用CultureInfo.InvariantCulture作为第二个参数。阅读this post

这意味着使用这个:

string str_rep = dt.ToString("dd'/'MM'/'yyyy");

或:

string str_rep = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);

答案 1 :(得分:1)

您的dtDateTime,而不是string。当您获得文本(又名string)表示时,格式概念适用。你看到的是可能 debbuger / ide作为文本表示形式的东西。

如果您获得dt特定格式,那么您可以使用.ToString()格式和正确的方法>文化如dd/MM/yyyy

InvariantCulture

对于初学者来说,了解DateTime和它们的字符串表示之间的区别非常重要

答案 2 :(得分:0)

如果DateTime.ToString()导致意外的格式,可能的情况是当前的文化没有被设置。默认情况下,使用的日期格式取自主机。但是,您可以通过为所需的区域性代码设置线程CurrentCulture来直接指定它,也可以在应用程序的配置文件中进行设置。例如,Web应用程序的web.config可以有globalization部分,如此;

<globalization culture="en-GB" uiCulture="en-GB" />

或者,如已指定,您可以通过自定义格式字符串.ToString("dd/MM/yyyy")显式设置格式。