【问题标题】:What is the easiest way to subtract time in C#?在 C# 中减去时间的最简单方法是什么?
【发布时间】:2010-10-22 01:20:08
【问题描述】:

我正在尝试组合一个工具来帮助我制定工作时间表。解决以下问题的最简单方法是什么?

  • 上午 8:00 + 5 小时 = 下午 1:00
  • 下午 5:00 - 2 小时 = 下午 3:00
  • 下午 5:30 - :45 = 4:45

等等。

【问题讨论】:

    标签: c# datetime math timespan


    【解决方案1】:

    这些都可以通过DateTime.Add(TimeSpan) 完成,因为它支持正时间跨度和负时间跨度。

    DateTime original = new DateTime(year, month, day, 8, 0, 0);
    DateTime updated = original.Add(new TimeSpan(5,0,0));
    
    DateTime original = new DateTime(year, month, day, 17, 0, 0);
    DateTime updated = original.Add(new TimeSpan(-2,0,0));
    
    DateTime original = new DateTime(year, month, day, 17, 30, 0);
    DateTime updated = original.Add(new TimeSpan(0,-45,0));
    

    或者你也可以类似地使用DateTime.Subtract(TimeSpan)方法。

    【讨论】:

    • 好的,我哪里出错了。我添加了一个 datetimepicker 并将其值分配给一个 datetime 变量。现在数学方法没有出现
    • @Sinaesthetic - 可能值得发布一些代码,这是一个与日期时间算术略有不同的问题
    • @Sinaesthetic 当您使用 DateTimePicker 时,请记住它可以显示 either 日期 时间,但保持一个 Value 组合both...如果您使用 Value 属性,您可能需要先减去一个或另一个组件。
    • 在第三个示例中,OP 想要减去 45 分钟,为什么在这个答案中我没有看到负值?这是一个错误吗?
    【解决方案2】:

    您好,如果您只想从 DateTime 中减去 Integer 值,那么您必须编写这样的代码

    DateTime.Now.AddHours(-2)
    

    这里我从当前日期和时间中减去 2 小时

    【讨论】:

      【解决方案3】:

      使用 TimeSpan 对象捕获您的初始时间元素,并使用 AddHoursAddMinutes 等方法。要减去 3 小时,您将执行 AddHours(-3)。减去 45 分钟,你会做AddMinutes(-45)

      【讨论】:

      • Use the TimeSpan object to capture your initial time element - 你是说DateTime吗?
      • 我指的是 System.TimeSpan 类型
      • 但初始时间是瞬间例如晚上 8:00 而不是时间跨度,例如45分钟。 (也很抱歉,我才意识到这是一篇多么古老的帖子。)
      • 但这就是我的意思。你会写 ts = new TimeSpan(8, 0, 0) 早上 8 点或 ts = new Timespan(20, 0, 0) 晚上 8 点,然后你会做 ts.AddMinutes(45)
      • 嗯...我想如果你真的不关心日期的话,这可以正常工作,但这在语义上不是时间跨度所代表的,它确实会提高你的WTFpm 评级。跨度>
      【解决方案4】:

      在此处查看所有 DateTime 方法:http://msdn.microsoft.com/en-us/library/system.datetime.aspx

      Add 返回一个新的 DateTime,它将指定 TimeSpan 的值与此实例的值相加。

      AddDays 返回一个新的 DateTime,它将指定的天数添加到此实例的值中。

      AddHours 返回一个新的 DateTime,它将指定的小时数添加到此实例的值中。

      AddMilliseconds 返回一个新的 DateTime,它将指定的毫秒数添加到此实例的值中。

      AddMinutes 返回一个新的 DateTime,它将指定的分钟数添加到此实例的值中。

      AddMonths 返回一个新的 DateTime,它将指定的月数添加到此实例的值中。

      AddSeconds 返回一个新的 DateTime,它将指定的秒数添加到此实例的值中。

      AddTicks 返回一个新的 DateTime,它将指定的刻度数添加到此实例的值中。

      AddYears 返回一个新的 DateTime,它将指定的年数添加到此实例的值中。

      【讨论】:

      • 对于遇到这个问题的每个人:您可以使用上面的这些函数并使用负值进行减法,只要实例尚未初始化为 DateTime.MinValue
      【解决方案5】:

      这也有效:

      System.DateTime dTime = DateTime.Now();
      
      // tSpan is 0 days, 1 hours, 30 minutes and 0 second.
      System.TimeSpan tSpan = new System.TimeSpan(0, 1, 3, 0); 
      
      System.DateTime result = dTime + tSpan;
      

      减去一年:

      DateTime DateEnd = DateTime.Now;
      DateTime DateStart = DateEnd - new TimeSpan(365, 0, 0, 0);
      

      【讨论】:

        【解决方案6】:

        试试这个

        namespace dateandtime
        {
        
            class DatesTime
            {
        
                public static DateTime Substract(DateTime now, int hours,int minutes,int seconds)
                {
                    TimeSpan T1 = new TimeSpan(hours, minutes, seconds);
                    return now.Subtract(T1);
                }
        
        
                static void Main(string[] args)
                {
                    Console.WriteLine(Substract(DateTime.Now, 36, 0, 0).ToString());
        
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-06-11
          • 2022-01-05
          • 2016-02-05
          • 2011-03-21
          • 2010-09-23
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          相关资源
          最近更新 更多