在C#中获得两次时间跨度?

时间:2012-09-20 21:42:58

标签: c# datetime timespan

我有两个文本框。一个用于时钟,一个用于时钟输出。时间将采用以下格式:

Hours:Minutes

让我们说我已经在早上7点钟进入,并在下午2点钟出发。

使用我当前的代码,我得到2小时的差异,但它应该是7小时。我怎么会在C#中做到这一点。我打算转换到24小时,让用户选择上午或下午,但我感到困惑。

所以,基本上,我如何计算两次之间的小时数差异?

我尝试了这个,但是当我插入数字时,却得了2个小时而不是7个小时。

DateTime startTime = Convert.ToDateTime(textBox1.Text);
DateTime endtime = Convert.ToDateTime(textBox2.Text);

TimeSpan duration = startTime - endtime;

4 个答案:

答案 0 :(得分:80)

string startTime = "7:00 AM";
string endTime = "2:00 PM";

TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));

Console.WriteLine(duration);
Console.ReadKey();

将输出:07:00:00。

如果用户输入军事时间,它也有效:

string startTime = "7:00";
string endTime = "14:00";

TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));

Console.WriteLine(duration);
Console.ReadKey();

输出:07:00:00。

更改格式: duration.ToString(@"hh\:mm")

更多信息: http://msdn.microsoft.com/en-us/library/ee372287.aspx

<强>附录:

多年来,我有点困扰我,这是我给过的最受欢迎的答案;原始答案从未真正解释为什么OP的代码不起作用,尽管它 完全有效。得到这么多选票的唯一原因是因为当人们搜索“C#”,“timespan”和“between”这两个术语的组合时,Google就会发布帖子。

答案 1 :(得分:10)

您可以使用TimeSpan构造函数,这对Ticks来说需要很长时间:

 TimeSpan duration = new TimeSpan(endtime.Ticks - startTime.Ticks);

答案 2 :(得分:4)

两点:

  1. 检查您的输入。我无法想象你通过减去你所谈论的时间值得到2小时的情况。如果我这样做:

        DateTime startTime = Convert.ToDateTime("7:00 AM");
        DateTime endtime = Convert.ToDateTime("2:00 PM");
        TimeSpan duration = startTime - endtime;
    

    ...我得到-07:00:00作为结果。即使我忘记提供AM / PM值:

        DateTime startTime = Convert.ToDateTime("7:00");
        DateTime endtime = Convert.ToDateTime("2:00");
        TimeSpan duration = startTime - endtime;
    

    ......我得到05:00:00。因此,要么您的输入不包含您列出的值,要么您处于机器环境中,它们会以意外的方式开始解析。或者您实际上并未获得报告的结果。

  2. 要查找开始时间和结束时间之间的差异,您需要执行endTime - startTime,而不是相反。

答案 3 :(得分:0)

另一种方式(更长)在VB.net [说2300开始和0700完成第二天]

如果tsStart&gt; tsFinish然后

                            ' Take Hours difference and adjust accordingly
                            tsDifference = New TimeSpan((24 - tsStart.Hours) + tsFinish.Hours, 0, 0)

                            ' Add Minutes to Difference
                            tsDifference = tsDifference.Add(New TimeSpan(0, Math.Abs(tsStart.Minutes - tsFinish.Minutes), 0))


                            ' Add Seonds to Difference
                            tsDifference = tsDifference.Add(New TimeSpan(0, 0, Math.Abs(tsStart.Seconds - tsFinish.Seconds)))