25

我想实现this的相反,即我想将string带格式hh:mm tt的 a转换为TimeSpan带零秒的 a。

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

4

5 回答 5

72

最简单的方法可能是将其解析为using DateTimeDateTime.ParseExact然后使用.TimeOfDayTimeSpan

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,但我有偏见:)

于 2013-07-09T16:46:13.463 回答
20

这为我工作。

TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay; 
于 2017-12-29T06:42:20.533 回答
0

对我有用的唯一方法是 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

于 2021-07-09T14:50:48.937 回答
0

您可以使用下面的代码片段将 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();

让我们享受吧!

谢谢

于 2018-03-19T11:02:03.677 回答
0
TimeSpan tspan;

tspan = DateTime.ParseExact("01:45 PM", "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
于 2015-08-19T10:06:04.473 回答