Andrew Venture
Andrew Venture

Reputation: 327

How to convert timespan to pm or am time?

I'm storing user time in UTC time and when I show it I need to convert it to am pm time.

Here is example in database I have 17:00:00 convert to 5:00 pm

Here is the code what I came up so far but it's not working

var time = DateTime.ParseExact(object.Time.ToString(), "HHmm", CultureInfo.CurrentCulture).ToString("hh:mm tt");

Upvotes: 11

Views: 27177

Answers (5)

Morgan Kenyon
Morgan Kenyon

Reputation: 3172

I just needed to display static html with my TimeSpan. So in my view I used,

DateTime.Today.Add(StartTime).ToString("%h:mm tt")

"StartTime" is my TimeSpan, it converts it to a DateTime and then displays it. My time now displays as "3:00 PM" instead of "15:00". The "%h" eliminates a leading zero for time that is between 1-9.

Upvotes: 3

ysrb
ysrb

Reputation: 6740

var time = DateTime.ParseExact("17:00", "HH:mm", null).ToString("hh:mm tt");

returns 05:00 PM

DateTime.ParseExact is returning DateTime

Edited:

Include CultureInfo

var time = DateTime.ParseExact("17:00", "HH:mm", null).ToString("hh:mm tt", CultureInfo.GetCultureInfo("en-US"));

Upvotes: 12

Andomar
Andomar

Reputation: 238078

Based on your comment, first convert the TimeSpan to a DateTime:

var dtUtc = DateTime.Now.ToUniversalTime();
dtUtc.AddHours(timeSpanObject.Hours);
dtUtc.AddMinutes(timeSpanObject.Minutes);

Once it's a DateTime, you can convert it from UTC to localtime:

var dtLocal = dtUtc.ToLocalTime();

Only when you display it would you include AM/PM, like:

dtLocal.ToString("h:mm tt");

Upvotes: 2

Kirill Polishchuk
Kirill Polishchuk

Reputation: 56162

Don't forget to specify appropriate culture, e.g.: CultureInfo.InvariantCulture.

var time = DateTime.Now.ToString("h:mm tt", CultureInfo.InvariantCulture);

See also: Custom Date and Time Format Strings

Upvotes: 4

Marc Gravell
Marc Gravell

Reputation: 1062630

TimeSpan is a duration "17 hours", not a time. Maybe add this to a date (only) and use the existing datetime formatting options? (although watch for daylight savings)

i.e.

string s = DateTime.Today.Add(duration).ToString(specifier);

Upvotes: 9

Related Questions