2009-10-10 4 views

Répondre

3

Temps d'exécution? Un laps de temps est juste une période de temps. Le "AM" montre que c'est un moment spécifique, donc cela ne peut pas être une période de temps. Ou voulez-vous analyser "9:00", sans le "AM", et obtenir une durée de 9 heures comme résultat?

@Your commentaire:

Vous pouvez utiliser une méthode qui fait cela pour vous. Voici une implémentation simple exemple (vous devez ajouter une meilleure validation des entrées, utiliser mieux convertir les méthodes que juste Convert.ToInt32() et ainsi de suite):

public static TimeSpan GetTimeSpanFormString(string strString) 
{ 
    strString = strString.Trim(); 
    string[] strParts = strString.Split(':', ' '); 

    int intHours, intMinutes; 

    if (strParts.Length != 3) 
     throw new ArgumentException("The string is not a valid timespan"); 

    intHours = strParts[2].ToUpper() == "PM" ? Convert.ToInt32(strParts[0]) + 12 : Convert.ToInt32(strParts[0]); 
    intMinutes = Convert.ToInt32(strParts[1]); 

    return new TimeSpan(intHours, intMinutes, 0); 
} 
+0

oui. Je dois obtenir 09:00:00 comme résultat quand je passe 09:00. Un autre exemple, 16:00:00 comme résultat quand je passe 16:00 – Prasad

+0

la fonction ci-dessus a fonctionné pour moi. Merci. – Prasad

0
TimeSpan.TryParse(yourString, out yourTimeSpan); 
5

9:00 AM est un moment ponctuel, alors que la structure TimeSpan représente des intervalles de temps afin que vous essayez de convertir des pommes avec des oranges.

+0

+1 Votre réponse était tout à fait correcte par rapport à la question originale, mais d'après les commentaires du PO, j'ai mis à jour la question pour refléter ce qu'il veut vraiment. – tvanfosson

2

Si vous voulez que le décalage par rapport à minuit, vous pouvez utiliser:

DateTime dateTime = DateTime.ParseExact(strValue, "h:mm tt"); 
    TimeSpan offset = dateTime - DateTime.Today; 
Questions connexes