上午/下午到TimeSpan
我希望实现与此相反的方式,也就是说,我希望将格式为hh:mm tt
的string
转换为具有零秒的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();
让我们享受吧!
谢谢