DateTime.ParseExact为' dd / MM / yyyy h:mm tt'返回错误的日期。格式

时间:2017-07-06 09:51:51

标签: c# date datetime

我需要将日期时间从MM/dd/yyyy h:mm:ss tt格式转换为dd/MM/yyyy h:mm:ss tt

我的代码

 var date = ((DateTime)model.WorkshopDate).ToString("dd/MM/yyyy h:mm:ss tt");

 var resultDate = DateTime.ParseExact(date, "dd/MM/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

结果date = 25/12/2017 12:00:00 AM

但是resultDate = 12/25/2017 12:00:00 AM

我该如何解析它?

3 个答案:

答案 0 :(得分:3)

您正在查看调试器中的对象,该对象是日期时间对象,而不是日期的显示版本。

示例:

var theDate = DateTime.UtcNow;

var date = theDate.ToString( "dd/MM/yyyy h:mm:ss tt" );
var resultDate = DateTime.ParseExact( date, "dd/MM/yyyy h:mm:ss tt", CultureInfo.InvariantCulture );

Console.WriteLine(date == resultDate.ToString("dd/MM/yyyy h:mm:ss tt"));//Returns true

如您所见,它们是相同的日期,只有.ToString()它才能显示您需要的任何格式。

答案 1 :(得分:0)

您不需要将其转换为String并返回DateTime。生成的DateTime对象应具有相同的日期。当你想在某个地方显示它时,你只需要转换它:

((DateTime)model.WorkshopDate).ToString("dd/MM/yyyy h:mm:ss tt");

答案 2 :(得分:0)

这里

var date = ((DateTime)model.WorkshopDate).ToString("dd/MM/yyyy h:mm:ss tt");

你隐含地要求在“dd / MM / yyyy h:mm:ss tt”中显示日期

var resultDate = DateTime.ParseExact(date, "dd/MM/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);

此处系统默认格式用于显示日期。

如果你想同时显示两个

Console.WriteLine(date);
Console.WriteLine(resultDate.ToString("dd/MM/yyyy h:mm:ss tt"));