Reputation: 327
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
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
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
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
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
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