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

时间:2011-07-17 13:19:35

标签: c# asp.net

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

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

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

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

5 个答案:

答案 0 :(得分:11)

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"));

答案 1 :(得分:7)

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

即。

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

答案 2 :(得分:3)

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

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

另请参阅:Custom Date and Time Format Strings

答案 3 :(得分:2)

根据您的评论,首先将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");

答案 4 :(得分:0)

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

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

"开始时间"是我的TimeSpan,它将它转换为DateTime然后显示它。我的时间现在显示为" 3:00 PM"而不是" 15:00"。 "%h"消除1-9之间的前导零。