代码之家  ›  专栏  ›  技术社区  ›  Vinko Vrsalovic

用C#处理时间的简单方法?

  •  5
  • Vinko Vrsalovic  · 技术社区  · 16 年前

    我目前的做法是

    DateTime startHour = new DateTime(1900,1,1,12,25,43);
    DateTime endHour = new DateTime(1900,1,1,13,45,32);
    
    // I need to, say, know if a complete DateTime instance 
    // is later than startHour plus 15 minutes
    
    DateTime now = DateTime.Now();
    
    startHour = startHour.addMinutes(15);
    
    if (now.CompareTo(new DateTime(now.Year, now.Month, now.Day, startHour.Hour, 
                        startHour.Minute, startHour.Second)) > 0) 
    {
        //I can do something now
    }
    

    这种计算的首选方法是什么?

    编辑:我正在进行的计算是将完整的DateTime实例与表示一天中实际时间的小时、分钟、秒三元组进行比较的方法,以及对这些三元组进行操作的方法(添加小时、分钟、秒)。

    编辑2:谢谢大家,我想我现在了解了DateTime API的要点。:)我唯一错过的是指定TimeSpan的方法,它应该只表示一天的时间,但这是次要的。

    4 回复  |  直到 10 年前
        1
  •  11
  •   Vinko Vrsalovic    16 年前

    根本不清楚你所说的“比星星更伟大”是什么意思。。。但是

    TimeSpan startHour = new TimeSpan(12, 25, 43);
    if (endHour.TimeOfDay > startHour)
    {
        ...
    }
    

    ... 工作起来很简单。

    务必添加参数检查,以确保不为startHour指定 < >

    与Joda time相比,.NET的日期和时间API非常原始(即使在3.5版本中也是如此),但在这种特殊情况下,我认为还不错。

        2
  •  2
  •   Fritz H    16 年前

    有一点提示-.NET支持对DateTime对象进行算术运算,并返回TimeSpan对象。因此,您可以执行以下操作:

    DateTime fromDate = ....
    DateTime toDate = ....
    TimeSpan diff = toDate - fromDate;
    

    您可以将其扩展到:

    DateTime fromDate = DateTime.Now;
    DateTime toDate = DateTime.Now.addMinutes(x);
    
    if ((toDate - fromDate).TotalMinutes > 15) {
        ...
    }
    
        3
  •  0
  •   Alfred Myers    16 年前

    与now相比,您应该将它们“转换”为完整的DateTime,或者使用Jon Skeet提到的DateTime.TimeOfDay获取时间。

    
    TimeSpan startHour = new TimeSpan(12, 25, 43);
    DateTime now = DateTime.Now;
    
    if (now.CompareTo(DateTime.Today.Add(startHour)) > 0) {
        //...
    }
    

    
    TimeSpan startHour = new TimeSpan(12, 25, 43);
    DateTime now = DateTime.Now;
    
    if (now.TimeOfDay.CompareTo(startHour) > 0) {
        //...
    }
    
        4
  •  0
  •   OJ.    16 年前

    if(DateTime.Now.TimeOfDay > startHour.TimeOfDay)
    {
      // do stuff
    }
    

    这样做有什么不对?

    推荐文章