c#中的时差,3位数格式的分钟

本文关键字:格式 3位 分钟 时差 | 更新日期: 2023-09-27 18:19:17

我在计算两个时间戳之间的差异时遇到问题,当分钟用3位数表示时,例如180:22 = 180分22秒。

那么,你能告诉我如何获得时间戳之间的差异吗?

180:22和122:11

232:21和31:34

等。

UPDATE:我需要得到两个时间之间的差异,定义为字符串。造成问题的是,这些字符串(时间)中的分钟数大于60,并且超出了限制。所以我需要知道如何找到像上面的例子(180:22和122:11,和232:21和31:34)的差异

c#中的时差,3位数格式的分钟

使用系统。时间间隔结构:

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;

这里有一个类来做这些事情:

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);

这行得通:

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;
}