上午/下午到TimeSpan

我希望实现与此相反的方式,也就是说,我希望将格式为hh:mm ttstring转换为具有零秒的TimeSpan

例如, 21:45:00 09:45 pm转换为21:45:00

最简单的方法可能是使用DateTime.ParseExact将其解析为DateTime.ParseExact ,然后使用TimeOfDay来确定TimeSpan

 DateTime dateTime = DateTime.ParseExact(text, "hh:mm tt", CultureInfo.InvariantCulture); TimeSpan span = dateTime.TimeOfDay; 

当你同时指定一个上午/下午指示符时,在几个小时内看到前导0很奇怪。 您可能希望在格式字符串中使用“h”而不是“hh”,以允许“9:45 pm”而不是“09:45 pm”。

(我也认为这首先是TimeSpan的奇怪用法,但是在我看来,.NET日期/时间类型有些混乱。我建议使用Noda Time ,但我有偏见:)

这项工作适合我。

 TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay; 
 TimeSpan tspan; tspan = DateTime.ParseExact("01:45 PM", "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay; 

您可以将meridiem时间转换为时间跨度,也可以将时间跨度转换为使用日期的meridiem时间,并且仅使用下面的代码snipet …

  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(); 

让我们享受吧!

谢谢