Home > Software design >  Why is there a difference in formatting a DateTime depending on the incoming DateTime-Format?
Why is there a difference in formatting a DateTime depending on the incoming DateTime-Format?

Time:10-19

I have code which parses a DateTime and formats it like this:

DateTime.Parse(DateTimeValueXY, CultureInfo.InvariantCulture).ToString("dd/MM/yyyy hh:mm:ss tt")

In one case I get the error

String was not recognized as a valid DateTime.

The confusing thing for me is the following:

When the DateTime which needs to be formatted has this format "MM/dd/yyyy" the formating works:

// WORKS
DateTime.Parse("10/19/2022", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy hh:mm:ss tt")

But if the DateTime has already the correct format the mentioned error is thrown:

// Error -> String was not recognized as a valid DateTime
DateTime.Parse("19/10/2022", CultureInfo.InvariantCulture).ToString("dd/MM/yyyy hh:mm:ss tt")

So there are two questions:

  • Why this throws the error if the format is already correct?
  • How would one handle the fact that the DateTime which needs to be formatted can have both formats?

CodePudding user response:

DateTime.Parse is failing not the ToString() because the input format is not correct.

You need to use DateTime.ParseExact and provide the correct format string or use a valid format (e.g. UK format) with DateTime.Parse:

DateTime.ParseExact("19/10/2022", "dd/MM/yyyy", CultureInfo.InvariantCulture);

OR

DateTime.Parse("19/10/2022", new CultureInfo("en-GB"));

In response to the second part of your question "How would one handle the fact that the DateTime which needs to be formatted can have both formats?", you should provide the format that the date is supposed to have by using either of the above methods.

  • Related