Arsen Ablaev
Arsen Ablaev

Reputation: 501

DateTime.ParseExact returns wrong date for the 'dd/MM/yyyy h:mm tt' format

I need to convert datetime from MM/dd/yyyy h:mm:ss tt format to the dd/MM/yyyy h:mm:ss tt

My code

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

In result date = 25/12/2017 12:00:00 AM

But resultDate = 12/25/2017 12:00:00 AM .

How can i parse it right?

Upvotes: 0

Views: 3266

Answers (3)

mak
mak

Reputation: 14

here

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

you are implicitly asking to display the date in "dd/MM/yyyy h:mm:ss tt"

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

here system default format is using to display the date.

if you want to display both as same

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

Upvotes: 0

EpicKip
EpicKip

Reputation: 4043

You are looking at the object in the debugger which is a datetime object and not a display version of your date.

Example:

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

As you see they are the same dates so just .ToString() it to whatever format you need when displaying.

Upvotes: 4

Romano Zumbé
Romano Zumbé

Reputation: 8099

You don't need to convert it to a String and back to a DateTime. The resulting DateTime object should have the same Date. You just need to convert it when you want to display it somewhere:

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

Upvotes: 0

Related Questions