Как я могу достигнуть операции модуля с Системой. Значения TimeSpan, без цикличного выполнения?

Если Вы только хотите исправить предпоследнюю фиксацию (например, недавно, особенно не перед многими ответвлениями и слияниями), то я использую эту процедуру:

  1. git checkout -b tmp bad-commit
  2. фиксируют файлы
  3. git commit --amend
  4. git rebase tmp master

, Если у Вас есть промежуточные слияния, можно хотеть попробовать rebase -i -p, но результаты могут варьироваться.

11
задан Giffyguy 18 August 2009 в 18:45
поделиться

5 ответов

Умножение легко:

TimeSpan a5 = TimeSpan.FromTicks(A.Ticks * 5);

Аналогично A / B:

double aOverB = (double)A.Ticks / B.Ticks;

И A% B:

TimeSpan aModB = TimeSpan.FromTicks(A.Ticks % B.Ticks);

Демонстрация:

using System;

class Test
{
    static void Main()
    {
        TimeSpan a = TimeSpan.FromSeconds(90);
        TimeSpan b = TimeSpan.FromSeconds(20);

        TimeSpan a5 = TimeSpan.FromTicks(a.Ticks * 5);
        double aOverB = (double)a.Ticks / b.Ticks;
        TimeSpan aModB = TimeSpan.FromTicks(a.Ticks % b.Ticks);

        Console.WriteLine(a5);
        Console.WriteLine(aOverB);
        Console.WriteLine(aModB);
    }
}

Вывод:

00:07:30
4.5
00:00:10
26
ответ дан 3 December 2019 в 01:33
поделиться

Что-нибудь вроде

new TimeSpan( A.Ticks % B.Ticks))

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

5
ответ дан 3 December 2019 в 01:33
поделиться

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

4
ответ дан 3 December 2019 в 01:33
поделиться

Я бы не стал делать это напрямую с объектом timespan, но использовал бы способность тиков.

Что-то вроде этого.

TimeSpan oSpan = new TimeSpan(0, 1, 20, 0, 0);
TimeSpan oShort = new TimeSpan(0, 0, 20, 0, 0);
long modRemainder = oSpan.Ticks % oShort.Ticks;
TimeSpan oRemainderSpan = new TimeSpan(modRemainder);

Вы можете сжать это до 1 шага, но я сделал это для иллюстрации. Это позволяет легко и просто выполнять любые математические операции, которые вы пожелаете.

3
ответ дан 3 December 2019 в 01:33
поделиться

Лучшее, что я могу придумать, - это использовать свойство TotalSeconds и модулировать его. Однако они Double, допускают дробные значения и, следовательно, могут не достигать точных значений, которые вы ищете. Вы всегда можете получить целые части и разделить их по модулю, но поскольку вы беспокоитесь о скорости, я боюсь, что это может быть слишком медленно для операции, которая должна выполняться сотни раз в секунду.

1
ответ дан 3 December 2019 в 01:33
поделиться