AM/PM to TimeSpan

本文关键字:TimeSpan to PM AM | 更新日期: 2023-09-27 18:21:37

我想实现相反的效果,也就是说,我想将格式为hh:mm ttstring转换为秒为零的TimeSpan

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

AM/PM to TimeSpan

最简单的方法可能是使用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