AM/PM to TimeSpan
本文关键字:TimeSpan to PM AM | 更新日期: 2023-09-27 18:21:37
我想实现相反的效果,也就是说,我想将格式为hh:mm tt
的string
转换为秒为零的TimeSpan
。
例如,09:45 pm
被转换为21:45:00
。
最简单的方法可能是使用DateTime.ParseExact
将其解析为DateTime
,然后使用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;
TimeSpan tspan;
tspan = DateTime.ParseExact("01:45 PM", "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
您可以使用下面的代码snippt将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();
让我们尽情享受吧!
感谢
唯一对我有效的方法是Convert.ToDateTime(str).TimeOfDay.ParseExact导致错误!
string str = "12:01 AM";
TimeSpan ts = Convert.ToDateTime(str).TimeOfDay;
取自:https://social.msdn.microsoft.com/Forums/vstudio/en-US/200b35bf-9d35-4348-80a7-9f31ee91c64c/convert-short-time-string-to-time-span?forum=csharpgeneral