以C#表示的时差,3位格式分钟

以C#表示的时差,3位格式分钟,c#,time,timestamp,C#,Time,Timestamp,我在计算两个时间戳之间的差异时遇到了一个问题,当分钟用3位数字表示时,例如180:22=180分22秒 那么,您能帮助我如何获得时间戳之间的差异,如: 180:22和122:11 或 232:21和31:34 等等 更新:我需要得到两次之间的差异,定义为字符串。造成问题的是,这些字符串中的分钟(时间)大于60,并且超过了限制。因此,我需要知道如何找到上述示例中的差异(180:22和122:11,以及232:21和31:34)使用结构: var seconds=(new TimeSpan(0, 1

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

那么,您能帮助我如何获得时间戳之间的差异,如:

180:22和122:11

232:21和31:34

等等

更新:我需要得到两次之间的差异,定义为字符串。造成问题的是,这些字符串中的分钟(时间)大于60,并且超过了限制。因此,我需要知道如何找到上述示例中的差异(180:22和122:11,以及232:21和31:34)

使用结构:

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;
使用结构:

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

这里有一个类可以做这些事情:

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;
}
这项工作:

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

请发布一些代码,说明这些时间值实际上是什么类型的:字符串?约会时间?时间跨度。。。以及产生的差异应该是什么类型。比如DateTime.Now.Subtract(DateTime.Now.TotalMinutes),还是只有分钟和秒部分以某种特殊的方式表示,而没有日期部分?请发布一些代码,说明这些时间值实际上是什么类型的:字符串?约会时间?时间跨度。。。结果的差异应该是什么样的?比如DateTime.Now.Subtract(DateTime.Now.TotalMinutes),还是只有分钟和秒的部分以某种特殊的方式表示,没有日期部分?我不同意。变量秒=3491,变量分钟=200783333。结果是正确的。@McKay根据@CédricBelin seconds=3491,您能提供一个产生错误结果的示例吗。看起来格式不正确。或者你不在乎格式吗?而且,这段代码实际上并不采用指定的格式。这只是做时间数学。但也许这就是OP想要的?@CédricBelin如果这就是你想写的,好吧,但我相信OP要求的更多。他可能需要三个不同的步骤:1)解释字符串,2)执行减法,3)形成结果。这个答案显然涵盖了中间步骤,我认为他想要这三个步骤。实际提出的问题肯定与前两个问题有关。我认为这个答案是不完整的,我不同意。变量秒=3491,变量分钟=200783333。结果是正确的。@McKay根据@CédricBelin seconds=3491,您能提供一个产生错误结果的示例吗。看起来格式不正确。或者你不在乎格式吗?而且,这段代码实际上并不采用指定的格式。这只是做时间数学。但也许这就是OP想要的?@CédricBelin如果这就是你想写的,好吧,但我相信OP要求的更多。他可能需要三个不同的步骤:1)解释字符串,2)执行减法,3)形成结果。这个答案显然涵盖了中间步骤,我认为他想要这三个步骤。实际提出的问题肯定与前两个问题有关。我相信这个答案是不完整的。我喜欢使用string.Split()。我喜欢使用string.Split()。