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



我需要将日期时间从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.

我怎样才能正确解析它?

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

例:

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()为显示时所需的任何格式即可。

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

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

这里

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"));

相关内容

最新更新