如何将时间跨度转换为下午或上午时间

本文关键字:时间 时间跨度 转换 | 更新日期: 2023-09-27 18:02:25

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

下面是在数据库中的例子,我有17:00:00转换到5:00 pm

这是目前为止我写的代码但是它不起作用

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返回日期时间

编辑:

包括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显示静态html。在我看来,我使用了

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

"StartTime"是我的时间跨度,它将其转换为日期时间,然后显示它。我的时间现在显示为"3:00 PM"而不是"15:00"。"%h"消除了1-9之间的时间的前导零。

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