【问题标题】:Getting time difference between two values获取两个值之间的时间差
【发布时间】:2012-05-08 13:58:38
【问题描述】:

在我的应用程序中,我有 4 个文本框,2 个文本框输入开始时间,2 个文本框输入结束时间。

用户将始终输入一个完整的时间,因此输入将始终是 11:30、12:45 等。

如何获取开始时间和结束时间之间的小时和分钟差异?

【问题讨论】:

标签: c# .net datetime


【解决方案1】:

使用 TimeSpan 类,以及 DateTime 的 Subtract 方法。

        DateTime t1 = Convert.ToDateTime(textBox1.Text);
        DateTime t2 = Convert.ToDateTime(textBox2.Text);
        TimeSpan ts = t1.Subtract(t2);

【讨论】:

  • 这很好用,但结果是 02:30:00,是否可以删除秒数以显示类似 2:30 的内容?
  • 如果你只关注时间,你真的应该使用TimeSpan而不是DateTime
  • TimeSpan 类还有一些更有用的属性,例如TotalSecondsTotalMinutes等,在得到TimeSpan对象ts后可以在这里使用。
【解决方案2】:

你可以通过减法得到TimeSpan的差值。

TimeSpan time1 = TimeSpan.Parse(textBox1.Text);
TimeSpan time2 = TimeSpan.Parse(textBox2.Text);

TimeSpan difference = time1 - time2;

int hours = difference.Hours;
int minutes = difference.Minutes;

【讨论】:

    【解决方案3】:

    创建两个DateTime 对象,解析TextBox 控件中的值,然后简单地减去两个DateTime,您将得到一个TimeSpan 对象,这就是您要查找的对象。

    【讨论】:

      【解决方案4】:

      使用TimeSpan,无需使用日期

      var start = TimeSpan.Parse(start.Text);
      var end = TimeSpan.Parse(end.Text);
      
      TimeSpan result = end - start;
      var diffInMinutes = result.TotalMinutes();
      

      【讨论】:

        【解决方案5】:

        使用时间跨度:

            DateTime dt1 = new DateTime(starttime.text);
            DateTime dt2 = new DateTime(endtime.text);
        
            TimeSpan result = dt2 - dt1;
        

        然后你可以从结果中得到分钟、秒等。

        【讨论】:

          【解决方案6】:
          TimeSpan difference = DateTime.Parse(txtbox1.Text) - Datetime.Parse(txtbox2.Text);
          

          例子:

          TimeSpan difference =  DateTime.Parse("12:55")-DateTime.Parse("11:45");
          double hourDiff=  difference.TotalHours;
          double minutes = difference.TotalMinutes;
          Console.WriteLine(hourDiff);//1.16666666666667
          Console.WriteLine(minutes);//70
          

          【讨论】:

            【解决方案7】:

            将小时转换为分钟,将其添加到现有分钟,将其转换为总秒数,对 endtime 执行相同操作。将它们彼此减去,将它们转换回小时和分钟。记住一小时内的 60 分钟,一分钟内的 60 秒,我就是这样处理它的。因为总秒数总是相同的,所以很难教计算机尝试从 60 回绕到 0 或从 12 回绕到 1。更容易使用像秒这样完全线性的东西。然后向上重新转换

            【讨论】:

            • 你可以看到我自己做的逻辑更多,所以它对我来说更容易理解,而不是其他人只是制作日期时间...... xD
            • 这太复杂了,TimeSpan 对用户来说更容易和更安全。
            • 我习惯于从我的老导师那里得到挑战,我们不得不在不使用内置函数的情况下做事情,以更好地理解它是如何工作的,并教我们更合乎逻辑,但仍然没有改掉这个习惯很遗憾
            • 你应该试着改掉这个习惯。虽然了解事物的工作原理很有用,但通过使用已知有效的内置函数来节省时间和金钱也很重要。每次都重新发明轮子不仅成本高昂,而且容易出错。 C# 有非常强大的类,学习使用它们。 :)
            • 但是这个要求其实没那么简单。使用框架类型(DateTimeTimeSpan)的一个重要原因是这些类型的解析函数具有详细记录的可本地化行为。如果您自己编写函数,如果用户使用的格式不是您编码的格式(2:45 PM2.45 PM14:4514.45 或您的其他选项),您将遇到麻烦'不知道)。
            【解决方案8】:

            你可以减去两个DateTimes 并得到一个TimeSpan 结构。这具有用于检索DaysHoursMinutesSeconds 等的属性。

            var first = new DateTime(2012, 05, 08, 10, 30, 00);
            var second = new DateTime(2012, 05, 08, 11, 49, 13);
            
            var diff = first - second;
            var hours = diff.Hours;
            var mins = diff.Minutes;
            

            【讨论】:

              猜你喜欢
              • 2013-09-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-09-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多