web-dev-qa-db-fra.com

AM/PM à TimeSpan

Je veux obtenir l’inverse de this , c’est-à-dire que je veux convertir une string au format hh:mm tt en une TimeSpan avec des secondes à zéro.

Par exemple, 09:45 pm est converti en 21:45:00.

18
Cleric

L’approche la plus simple consisterait probablement à l’analyser en tant que DateTime à l’aide de DateTime.ParseExact, puis à utiliser TimeOfDay pour exiger la valeur TimeSpan.

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

Il est étrange de voir un 0 en tête sur un nombre d'heures lorsque vous êtes aussi en spécifiant un indicateur am/pm. Vous voudrez peut-être que "h" au lieu de "hh" dans la chaîne de formatage, pour permettre "21h45" au lieu de "21h45".

(Je dirais également que c’est une utilisation étrange de TimeSpan en premier lieu, mais les types de date et d’heures .NET sont un peu gâchés à mon avis. Je recommanderais d’utiliser Noda Time , mais je ' m biaisé :)

60
Jon Skeet

Ce travail pour moi.

TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay; 
9
Naveed Ahmed
TimeSpan tspan;

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

Vous pouvez convertir le temps meridiem en un intervalle de temps et également un intervalle de temps en un temps meridiem avec la date et l'heure uniquement en utilisant le code ci-dessous ...

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

Profitons!

Merci

0
Rejwanul Reja