3

当我使用以下代码时,我有格式的日期字符串dd-MMM-yyyy并希望将其转换为datetime

DateTime.ParseExact("20-Oct-2012", "yyyy-MM-dd HH:mm tt", null) 

它导致错误

字符串未被识别为有效的日期时间。

当我修改上面的代码

DateTime.ParseExact("20-Oct-2012", "dd-MMM-yyyy", null) 

然后我得到格式(mm/dd/yyyy)的日期时间:10/20/2012 12:00:00 AM

但我需要它应该转换为yyyy/mm/dd格式。请在这方面帮助我。

4

3 回答 3

6

你应该试试这个

DateTime.ParseExact("20-Oct-2012", "dd-MMM-yyyy", null).ToString("yyyy/mm/dd")

有关格式的进一步阅读,请查看此

于 2012-10-20T10:31:25.590 回答
1

您需要区分两个不同的问题:将原始字符串解析为抽象DateTime表示,以及将后者转换回另一个字符串表示。

在您的代码中,您只处理前者,并依靠隐式ToString()方法调用(使用系统的当前语言环境)将其转换回字符串。如果要控制输出格式,需要显式指定:

// Convert from string in "dd-MMM-yyyy" format to DateTime.
DateTime dt = DateTime.ParseExact("20-Oct-2012", "dd-MMM-yyyy", null);

// Convert from DateTime to string in "yyyy/MM/dd" format.
string str = dt.ToString("yyyy/MM/dd");

另请注意,mm格式说明符代表分钟;月由 表示MM

编辑:'转换后的日期包含值“10/20/2012 12:00:00 AM”。' 小心你的意思。构造的DateTime值包含独立于任何格式的解析日期和时间的抽象表示。

但是,为了显示它,您需要将其转换回某种字符串表示形式。当您在调试器中查看变量时(您可能正在这样做),Visual Studio 会自动调用 上的无参数ToString()方法,该方法在DateTime当前文化下呈现日期和时间(在您的情况下,假定为美国文化)。

要更改此行为以使其以自定义格式呈现日期和时间,您需要显式调用ToString(string)重载(或其他重载之一),如我在上面的示例中所示。

于 2012-10-20T10:34:34.280 回答
0

你可以试试这个:

Convert.ToDateTime("20-Oct-2012").ToString("yyyy/MM/dd")

希望这会有所帮助!

于 2012-10-20T10:35:36.103 回答