Sreerejith S S
Sreerejith S S

Reputation: 258

How to converting in to time?

I am trying to convert to time from a string My string are like this "11:45 AM" or "03:19 PM" and i am using

dateTime = DateTime.ParseExact("11:45 AM", "H:mm tt",
                                System.Globalization.CultureInfo.InvariantCulture);

Then it is getting converted but when i am passing

DateTime.ParseExact("3:19 PM", "H:mm tt", 
                     System.Globalization.CultureInfo.InvariantCulture).ToString();

Getting error as

String was not recognized as a valid DateTime.

I cant understand why it is happening any one have idea then please help me

Upvotes: 2

Views: 167

Answers (4)

Soner Gönül
Soner Gönül

Reputation: 98750

Unfortunately, none of the answers are completely correct.

Ante meridiem and post meridiem belong to the 12-hour clock format. That's why you should never use 24-hour clock format specifiers if your string contains one of them.

That's why you need to use h or hh specifiers, not H or HH. Since your hour part can be with leading zeros, using hh specifier is the best option for both of your string types.

Using the hh:mm tt format will parse your strings successfully.

string s = "03:19 PM";
DateTime dt;
if(DateTime.TryParseExact(s, "hh:mm tt", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    dt.Dump(); // 29.05.2015 15:19:00
}

and

string s = "11:45 AM";
DateTime dt;
if(DateTime.TryParseExact(s, "hh:mm tt", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    dt.Dump(); // 29.05.2015 11:45:00
}

Also, you mentioned the 3:19 PM string in your code example. Since the hour part is single digit, you need to use the h:mm tt format in that case.

Upvotes: 1

Sachin
Sachin

Reputation: 40970

As you want to parse the 12 hr format and convert it to the 24 hr format then you can just use this

string dt = DateTime.ParseExact("3:19 PM", "h:mm tt",CultureInfo.InvariantCulture).ToString("HH:mm");;

Upvotes: 3

NeddySpaghetti
NeddySpaghetti

Reputation: 13495

I would use h instead of H. H is for the 24hr fromat, h for the 12hr format.

DateTime.ParseExact("9:45 PM", "h:mm tt", System.Globalization.CultureInfo.InvariantCulture)

See the full list of format options here.

Upvotes: 4

Thanos Markou
Thanos Markou

Reputation: 2624

Invariant culture requires two-digit hours.

Upvotes: -1

Related Questions