如何将24小时格式的TimeSpan转换为12小时格式的TimeSpan?
我有TimeSpan数据表示为24小时格式,如14:00:00,我想将其转换为12小时格式,下午2:00,我google搜索并发现stackoverflow和msdn相关的东西,但没有解决这个问题,任何人都可以帮助我吗? 提前致谢。
更新似乎可以将24小时格式TimeSpan转换为String,但无法将字符串转换为12小时格式TimeSpan 🙁
但是我仍然有很多好的答案,谢谢!
TimeSpan
表示时间间隔,而不是一天中的时间。 DateTime
结构更有可能是您正在寻找的。
(在一个答案中总结我分散的评论。)
首先,您需要了解TimeSpan
表示时间间隔。 此时间间隔在内部表示为刻度的计数,而不是字符串14:00:00
和字符串2:00 PM
。 只有将TimeSpan
转换为字符串时,才能讨论两种不同的字符串表示forms。 从一种表示切换到另一种表示不会改变或转换存储在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);
在MSDN上的自定义日期和时间格式字符串页面上记录了在
ToString
中使用的格式说明符。 指定使用所需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对象,然后使用您需要的任何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");