如何将 24 小时格式的时间跨度转换为 12 小时格式的时间跨度
本文关键字:时间跨度 小时 格式 转换 | 更新日期: 2023-09-27 18:30:57
我有 TimeSpan 数据表示为 24 小时格式,例如 14:00:00,我想将其转换为 12 小时格式,下午 2:00,我用谷歌搜索并在堆栈溢出和 msdn 中找到了一些相关的东西,但没有解决这个问题,有人可以帮助我吗?提前谢谢。
更新似乎可以将 24 小时格式的 TimeSpan 转换为字符串,但无法将字符串转换为 12 小时格式的 TimeSpan :(
但我仍然得到了很多很好的答案,谢谢!
答案中总结我分散的评论。
首先,您需要了解TimeSpan
表示时间间隔。此时间间隔在内部表示为刻度计数,而不是字符串14:00:00
或字符串2:00 PM
。只有当您将TimeSpan
转换为字符串时,才有意义地谈论两种不同的字符串表示形式。从一种表示切换到另一种表示形式不会更改或转换存储在TimeSpan
中的刻度计数。
将时间写入2:00 PM
而不是14:00:00
是关于日期/时间格式和区域性的。这一切都由DateTime
类处理。
然而,即使TimeSpan
表示时间间隔,它也非常适合表示一天中的时间(DateTime.TimeOfDay
返回一个TimeSpan
)。因此,将其用于此目的并非不合理。
要执行所描述的格式化,您需要依赖DateTime
的格式化逻辑,或者只需创建自己的格式化代码。
使用
DateTime
:var dateTime = new DateTime(timeSpan.Ticks); // Date part is 01-01-0001 var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
在
ToString
中使用的格式说明符记录在 MSDN 上的"自定义日期和时间格式字符串"页上。指定使用所需 AM/PM 指示符的CultureInfo
非常重要。否则,tt
格式说明符可能会替换为空字符串。使用自定义格式:
var hours = timeSpan.Hours; var minutes = timeSpan.Minutes; var amPmDesignator = "AM"; if (hours == 0) hours = 12; else if (hours == 12) amPmDesignator = "PM"; else if (hours > 12) { hours -= 12; amPmDesignator = "PM"; } var formattedTime = String.Format("{0}:{1:00} {2}", hours, minutes, amPmDesignator);
诚然,此解决方案比第一种方法复杂得多。
TimeSpan
表示时间间隔而不是一天中的时间。DateTime
结构更有可能是您要查找的。
您需要先将 TimeSpan 转换为 DateTime 对象,然后使用所需的任何 DateTime 格式:
var t = DateTime.Now.TimeOfDay;
Console.WriteLine(new DateTime(t.Ticks).ToString("hh:mm:ss tt"));
ToShortTimeString()
也可以工作,但它取决于区域设置,因此它不会在非美国系统上正确显示(或正确显示,具体取决于您如何看到它)。
TimeSpan
表示时间间隔(时间之间的差异),不是日期或时间,因此以 24 或 12h 格式定义它毫无意义。我假设你真的想要一个DateTime
.
例如今天的下午 2 点:
TimeSpan ts = TimeSpan.FromHours(14);
DateTime dt = DateTime.Today.Add(ts);
然后,您可以根据需要设置该日期的格式:
String formatted = String.Format("{0:d/M/yyyy hh:mm:ss}", dt); // "12.4.1012 02:00:00" - german (de-DE)
http://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.100%29.aspx
试试这段代码:
int timezone = 0;
此字符串提供 12 小时格式
string time = DateTime.Now.AddHours(-timezone).ToString("hh:mm:ss tt");
此字符串提供 24 小时格式
string time = DateTime.Now.AddHours(-timezone).ToString("HH:mm:ss tt");
假设您停留在 24 小时内,您可以通过从今天的DateTime
(或任何与此相关的日期)中减去负TimeSpan
来实现您想要的,然后去除日期部分:
DateTime dt = DateTime.Today;
dt.Subtract(-TimeSpan.FromHours(14)).ToShortTimeString();
收益 率:
下午2:00
String formatted = yourDateTimeValue.ToString("hh:mm:ss tt");
这很简单,假设我们有一个 TimesSpan 的对象 ts: TimeSpan ts = new TimeSpan();
假设它包含一些值,例如 14:00:00现在首先将其转换为字符串,然后在日期时间中如下:
TimeSpan ts = new TimeSpan(); // this is object of TimeSpan and Suppose it contains
// value 14:00:00
string tIme = ts.ToString(); // here we convert ts into String and Store in Temprary
// String variable.
DateTime TheTime = new DateTime(); // Creating the object of DateTime;
TheTime = Convert.ToDateTime(tIme); // now converting our temporary string into DateTime;
Console.WriteLine(TheTime.ToString(hh:mm:ss tt));
这将结果显示为: 02:00:00 下午
正常日期时间可以转换为 24 或 12 小时格式。
对于 24 小时格式 - MM/dd/yyyy HH:mm:ss tt
对于 12 小时格式 - MM/dd/yyyy hh:mm:ss tt
有资本和小H的区别。
dateTimeValue.ToString(format, CultureInfo.InvariantCulture);