我想实现this的相反,即我想将string
带格式hh:mm tt
的 a转换为TimeSpan
带零秒的 a。
例如,09:45 pm
转换为21:45:00
.
最简单的方法可能是将其解析为using DateTime
,DateTime.ParseExact
然后使用.TimeOfDay
TimeSpan
DateTime dateTime = DateTime.ParseExact(text,
"hh:mm tt", CultureInfo.InvariantCulture);
TimeSpan span = dateTime.TimeOfDay;
但是,当您还指定 am/pm 指示符时,在几个小时内看到前导 0 是很奇怪的。您可能希望在格式字符串中使用“h”而不是“hh”,以允许使用“9:45 pm”而不是“09:45 pm”。
(我还认为它首先是一个奇怪的用法TimeSpan
,但是在我看来.NET 日期/时间类型有些混乱。我建议使用Noda Time,但我有偏见:)
这为我工作。
TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay;
对我有用的唯一方法是 Convert.ToDateTime(str).TimeOfDay。ParseExact 导致错误!
string str = "12:01 AM";
TimeSpan ts = Convert.ToDateTime(str).TimeOfDay;
您可以使用下面的代码片段将 meridiem 时间转换为时间跨度,也可以将时间跨度转换为带有日期和仅时间的 meridiem 时间...
TimeSpan ts = DateTime.Parse("8:00 PM").TimeOfDay;
DateTime dateWithTimeSlot = DateTime.Today+ ts;
//for getting MM/dd/yyyy hh:mm tt format
string dateWithMeridiemTimeSlot =
dateWithTimeSlot.ToString("MM/dd/yyyy hh:mm tt: ", CultureInfo.InvariantCulture);
Console.WriteLine("For getting MM/dd/yyyy hh:mm tt format: "+dateWithMeridiemTimeSlot);
//for getting only hh:mm tt format
string meridiemTimeSlot =
dateWithTimeSlot.ToString("hh:mm tt", CultureInfo.InvariantCulture);
Console.WriteLine("For getting only hh:mm tt format: " + meridiemTimeSlot);
Console.ReadLine();
让我们享受吧!
谢谢
TimeSpan tspan;
tspan = DateTime.ParseExact("01:45 PM", "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;