我有 TimeSpan 数据表示为 24 小时格式,例如 14:00:00,我想将其转换为 12 小时格式,下午 2:00,我用谷歌搜索并在 stackoverflow 和 msdn 中找到了相关的内容,但没有解决这个问题,谁能帮帮我?提前致谢。
更新 似乎可以将 24 小时格式的 TimeSpan 转换为字符串,但无法将字符串转换为 12 小时格式的 TimeSpan :(
但是我仍然得到了很多好的答案,谢谢!
我有 TimeSpan 数据表示为 24 小时格式,例如 14:00:00,我想将其转换为 12 小时格式,下午 2:00,我用谷歌搜索并在 stackoverflow 和 msdn 中找到了相关的内容,但没有解决这个问题,谁能帮帮我?提前致谢。
更新 似乎可以将 24 小时格式的 TimeSpan 转换为字符串,但无法将字符串转换为 12 小时格式的 TimeSpan :(
但是我仍然得到了很多好的答案,谢谢!
(在一个答案中总结我分散的评论。)
首先,您需要了解它TimeSpan
代表一个时间间隔。此时间间隔在内部表示为滴答计数,不是字符串14:00:00
也不是字符串2:00 PM
。只有当您将 转换TimeSpan
为字符串时,谈论两种不同的字符串表示形式才有意义。从一种表示切换到另一种表示不会改变或转换存储在TimeSpan
.
写时间2:00 PM
而不是14:00:00
关于日期/时间格式和文化。这一切都由DateTime
班级处理。
但是,即使TimeSpan
表示时间间隔,它也非常适合表示一天中的时间(DateTime.TimeOfDay
返回 a TimeSpan
)。因此,将其用于此目的并非不合理。
要执行所描述的格式化,您需要依赖格式化逻辑DateTime
或简单地创建自己的格式化代码。
使用DateTime
:
var dateTime = new DateTime(timeSpan.Ticks); // Date part is 01-01-0001
var formattedTime = dateTime.ToString("h:mm tt", CultureInfo.InvariantCulture);
使用 in 的格式说明符ToString
记录在 MSDN 上的自定义日期和时间格式字符串页面上。CultureInfo
指定使用所需 AM/PM 指示符的a 很重要。否则,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 对象,然后使用您需要的任何DateTime 格式:
var t = DateTime.Now.TimeOfDay;
Console.WriteLine(new DateTime(t.Ticks).ToString("hh:mm:ss tt"));
ToShortTimeString()
也可以,但它取决于区域设置,因此它不会在非美国系统上正确显示(或正确显示,取决于你如何看待它)。
TimeSpan
表示时间间隔(时间之间的差异),而不是日期或时间,因此以 24 小时或 12 小时格式定义它几乎没有意义。我假设您实际上想要一个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");
TimeSpan
假设您停留在 24 小时范围内,您可以通过从今天DateTime
(或任何日期)中减去负数来实现您想要的结果,然后去掉日期部分:
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 现在首先将其转换为字符串,然后在 DateTime 中如下所示:
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 PM