Разница во времени в C #, минуты в 3-значном формате - PullRequest
1 голос
/ 04 января 2012

У меня проблема с вычислением разницы между двумя временными метками, когда минуты представлены 3 цифрами, например, 180: 22 = 180 минут и 22 секунды.

Итак, вы можете мне помочь, как я могу получить разницу между временными метками, такими как:

180: 22 и 122: 11

или

232: 21 и 31: 34

и т.д.

ОБНОВЛЕНИЕ: мне нужно получить разницу между двумя значениями, определенными как строки. Проблема в том, что минуты в этих строках (временах) больше 60, и они превышают лимит. Поэтому мне нужно знать, как найти разницу, как в приведенных выше примерах (180: 22 и 122: 11, а также 232: 21 и 31:34)

Ответы [ 3 ]

1 голос
/ 04 января 2012

Использование System.TimeSpan структуры:

var seconds=(new TimeSpan(0, 180, 22)-new TimeSpan(0, 122, 11)).TotalSeconds;
var minutes=(new TimeSpan(0, 232, 21)-new TimeSpan(0, 31, 34)).TotalMinutes;
0 голосов
/ 04 января 2012

Это работает:

string time1 = "180:22";
string time2 = "122:11";

TimeSpan span1 = getTimespan(time1);
TimeSpan span2 = getTimespan(time2);

TimeSpan diff = span1 - span2;

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

private static TimeSpan getTimespan(string time1)
{
    Regex reg = new Regex(@"\d+");
    MatchCollection matches = reg.Matches(time1);
    if (matches.Count == 2)
    {
        int minutes = int.Parse(matches[0].Value);
        int seconds = int.Parse(matches[1].Value);
        return new TimeSpan(0, minutes, seconds);
    }
    return TimeSpan.Zero;
}
0 голосов
/ 04 января 2012

Вот класс, который будет делать это:

public class CrazyTime
{
    public TimeSpan TimeSpanRepresentation { get; set; }
    public CrazyTime(TimeSpan timeSpan)
    {
        this.TimeSpanRepresentation = timeSpan;
    }
    public CrazyTime(string crazyTime)
    {
        // No error checking. Add if so desired
        var pieces = crazyTime.Split(new[] { ':' });
        var minutes = int.Parse(pieces[0]);
        var seconds = int.Parse(pieces[1]);
        TimeSpanRepresentation = new TimeSpan(0, minutes, seconds);
    }
    public static CrazyTime operator-(CrazyTime left, CrazyTime right)
    {
        var newValue = left.TimeSpanRepresentation - right.TimeSpanRepresentation;
        return new CrazyTime(newValue);
    }
    public override string ToString()
    {
        // How should negative Values look?
        return ((int)Math.Floor(TimeSpanRepresentation.TotalMinutes)).ToString() + ":" + TimeSpanRepresentation.Seconds.ToString();
    }
}

Вот как это можно использовать:

        var a = new CrazyTime("123:22");
        var b = new CrazyTime("222:11");
        var c = b - a;
        Console.WriteLine(c);
...