如何将时间跨度转换为pm或am time?

我将用户时间存储在UTC时间,当我显示它时,我需要将其转换为上午时间。

这是数据库中的示例我将17:00:00转换为下午5:00

这是我到目前为止所提出的代码,但它不起作用

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

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

返回05:00 PM

DateTime.ParseExact返回DateTime

编辑:

包括CultureInfo

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

TimeSpan的持续时间为“17小时”,而不是时间。 也许将此添加到日期(仅)并使用现有的日期时间格式选项? (虽然注意夏令时)

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

不要忘记指定适当的文化,例如: CultureInfo.InvariantCulture

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

另请参阅: 自定义日期和时间格式字符串

根据您的评论,首先将TimeSpan转换为DateTime

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

一旦它是DateTime ,您可以将它从UTC转换为本地时间:

 var dtLocal = dtUtc.ToLocalTime(); 

只有在您显示它时才会包含AM / PM,例如:

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

我只需要用我的TimeSpan显示静态html。 所以在我看来,我用过,

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

“StartTime”是我的TimeSpan,它将其转换为DateTime然后显示它。 我的时间现在显示为“下午3:00”而不是“15:00”。 “%h”消除了1-9之间的前导零。