AM / PM в TimeSpan

Я хочу добиться преобразования этого, что есть, я хочу преобразовать string в формате hh:mm tt в TimeSpan с обнуленными секундами.

Например, 09:45 pm преобразуется в 21:45:00.


person wjm    schedule 09.07.2013    source источник
comment
TimeSpan не имеет формата.   -  person Henk Holterman    schedule 09.07.2013


Ответы (4)


Самым простым подходом, вероятно, было бы проанализировать его как DateTime с помощью DateTime.ParseExact, а затем использовать TimeOfDay , чтобы точнее TimeSpan.

DateTime dateTime = DateTime.ParseExact(text,
                                    "hh:mm tt", CultureInfo.InvariantCulture);
TimeSpan span = dateTime.TimeOfDay;

Странно видеть 0 в начале нескольких часов, когда вы также указываете обозначение am / pm. Вы можете захотеть «h» вместо «hh» в строке формата, чтобы разрешить «9:45 pm» вместо «21:45 pm».

(Я бы также сказал, что это вообще странное использование TimeSpan, но тогда типы даты / времени .NET, на мой взгляд, несколько перепутаны. Я бы рекомендовал использовать Noda Time, но я пристрастен :)

person Jon Skeet    schedule 09.07.2013

Эта работа для Меня.

TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay; 
person Naveed Ahmed    schedule 29.12.2017

Вы можете преобразовать время меридием в промежуток времени, а также промежуток времени в время в меридиуме с датой и только временем, используя фрагмент кода ниже ...

        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();

Давай насладимся!

Спасибо

person Rejwanul Reja    schedule 19.03.2018

Единственный способ, который сработал для меня, - 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

person zvi shmuel naiman    schedule 09.07.2021