web-dev-qa-db-fra.com

Gérer les délais négatifs

Dans ma sortie d'une grille, je calcule une TimeSpan et prends sa TotalHours. par exemple.

(Eval("WorkedHours") - Eval("BadgedHours")).TotalHours

Le but est d’afficher la TotalHours sous la forme 39:44. Je dois donc convertir la valeur de 7.5 en 07:30. Ce n'est pas un problème ... sauf si c'est négatif!

Je peux créer un objet TimeSpan à partir de Hours avec 

TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours)

Si c'est négatif, je ne peux pas le convertir en DateTime pour utiliser la méthode .ToString("HH:mm") et l'objet TimeSpan ne prend pas en charge la chaîne de formatage.

30
fr0xx

N'y a-t-il pas une méthode TimeSpan.Duration? Je pense que cela gérerait ce que vous essayez de faire.

72
Jared
static string ToHMString(TimeSpan timespan) { 
    if (timespan.Ticks < 0) return "-" + ToHMString(timespan.Negate());

    return timespan.TotalHours.ToString("#0") + ":" + timespan.Minutes.ToString("00");
}

Console.WriteLine(ToHMString(TimeSpan.FromHours(3)));       //Prints "3:00"
Console.WriteLine(ToHMString(TimeSpan.FromHours(-27.75)));  //Prints "-28:45"

Cela fonctionnera également correctement si la durée est supérieure à 24 heures.

9
SLaks

Il suffit de le multiplier par -1 ou d'utiliser une fonction de valeur absolue.

7
Daniel A. White

son travail .essaie cette 

mytimespam.Negate ();

4
Deval Patel

Il existe une méthode Negate dans la classe TimeSpan.

Lien vers la documentation MSDN: TimeSpan.Negate, méthode ()

4
Eugeniu Torica

La solution simple serait de faire:

string format = "HH:mm";
if(hours < 0)
  format = "-" + format;

hours = Math.Abs(hours)
3
jvenema

Bonjour, j'ai écrit ceci dans un peu de code, j'espère que cela aide

(résultats) est une variable int

(TimeSpan.FromMinutes(result)) < TimeSpan.Zero ? "-" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm") : "" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm");

1

J'ai vérifié à chaque endroit. Mais je n'ai pas obtenu de réponse correcte, c'est pourquoi j'ai utilisé cette méthode pour finir

TimeSpan diff = actualout.Subtract(actualin);
 string a =(diff.ToString()).ToString();
if(a.Contains("-"))
 {        
 diff = new TimeSpan(0,0,0,0);
}
0
sajin k