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
.
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é :)
Ce travail pour moi.
TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay;
TimeSpan tspan;
tspan = DateTime.ParseExact("01:45 PM", "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
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