Обрабатывать отрицательные промежутки времени - PullRequest
32 голосов
/ 19 июня 2009

В моем выводе сетки я вычисляю TimeSpan и беру ее TotalHours. например,

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

Цель - показать TotalHours как 39:44, поэтому мне нужно преобразовать значение из 7.5 в 07:30. Это не проблема ... если только это не отрицательно!

Я могу создать TimeSpan объект из Hours с помощью

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

Если оно отрицательное, я не могу преобразовать его в DateTime для использования метода .ToString("HH:mm"), а объект TimeSpan не поддерживает строку формата.

Ответы [ 9 ]

76 голосов
/ 28 ноября 2011

Не существует ли TimeSpan.Duration метод? Я думаю, что это справится с тем, что вы пытаетесь сделать.

9 голосов
/ 19 июня 2009
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"

Это также будет работать корректно, если продолжительность больше 24 часов.

8 голосов
/ 19 июня 2009

Просто умножьте его на -1 или используйте функцию абсолютного значения.

5 голосов
/ 01 ноября 2011

В классе TimeSpan есть метод Negate.

Ссылка на документацию MSDN: Метод TimeSpan.Negate ()

4 голосов
/ 02 января 2015

работает. Попробуйте это

mytimespam.Negate ();

3 голосов
/ 19 июня 2009

Простым решением было бы сделать:

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

hours = Math.Abs(hours)
1 голос
/ 18 ноября 2014

Привет, я превратил это в немного кода, который я писал, надеюсь, это поможет

(результаты) - переменная типа int

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

0 голосов
/ 22 июня 2019
TimeSpan Diff = Date1 - Date2;

if ((int)Diff.TotalDays < 0) { // your code }
0 голосов
/ 20 февраля 2018

Я проверял каждый где. Но я не получил правильный ответ, почему я использовал этот способ, чтобы закончить

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