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.
N'y a-t-il pas une méthode TimeSpan.Duration
? Je pense que cela gérerait ce que vous essayez de faire.
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.
Il suffit de le multiplier par -1 ou d'utiliser une fonction de valeur absolue.
son travail .essaie cette
mytimespam.Negate ();
Il existe une méthode Negate dans la classe TimeSpan.
Lien vers la documentation MSDN: TimeSpan.Negate, méthode ()
La solution simple serait de faire:
string format = "HH:mm";
if(hours < 0)
format = "-" + format;
hours = Math.Abs(hours)
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");
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);
}