上午/下午到TimeSpan

时间:2013-07-09 16:44:42

标签: c# datetime timespan

我希望实现this的反转,也就是说,我希望将格式为string的{​​{1}}转换为hh:mm tt,并将其归零。

例如,TimeSpan转换为09:45 pm

5 个答案:

答案 0 :(得分:61)

最简单的方法可能是使用DateTime将其解析为DateTime.ParseExact,然后使用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日期/时间类型有些混乱。我建议使用{{3但是我有偏见:)

答案 1 :(得分:10)

这项工作适合我。

TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay; 

答案 2 :(得分:0)

TimeSpan tspan;

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

答案 3 :(得分:0)

你可以将meridiem时间转换为时间跨度,也可以将时间跨度改为meridiem time with date,只使用下面的代码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();

让我们享受!

由于

答案 4 :(得分:0)

对我有用的唯一方法是 Convert.ToDateTime(str).TimeOfDay。 ParseExact 导致错误!

gv.save()

取自:https://social.msdn.microsoft.com/Forums/vstudio/en-US/200b35bf-9d35-4348-80a7-9f31ee91c64c/convert-short-time-string-to-time-span?forum=csharpgeneral