2011-03-19 73 views

回答

2

使用Subtract方法获得差异,这是一个TimeSpan值。例如:

TimeSpan diff = SecondDate.Subtract(FirstDate); 

你可以得到例如时间跨度长的时间如下:

double hours = diff.TotalHours; 

我不知道哪个时间单位“日日夜夜”可以被解释为,虽然。也许几天?

double days = diff.TotalDays; 
1
DateTime dt1,dt2; 
//... 
TimeSpan period = dt1 - dt2; 
int days = period.Days; 
3
private List<DateTime> GetDateRange(DateTime StartingDate, DateTime EndingDate) 
{ 
    if (StartingDate > EndingDate) 
    { 
     return null; 
    } 
    List<DateTime> rv = new List<DateTime>(); 
    DateTime tmpDate = StartingDate; 
    do 
    { 
     rv.Add(tmpDate); 
     tmpDate = tmpDate.AddDays(1); 
    } while (tmpDate <= EndingDate); 
    return rv; 
} 

要查看此代码的运行,复制并粘贴下面的代码到SnippetCompiler:

DateTime StartingDate = DateTime.Parse("02/25/2007"); 
DateTime EndingDate = DateTime.Parse("03/06/2007"); 
foreach (DateTime date in GetDateRange(StartingDate,EndingDate)) 
{ 
    WL(date.ToShortDateString()); 
} 

输出示例:

2/25/2007 
2/26/2007 
2/27/2007 
2/28/2007 
3/1/2007 
3/2/2007 
3/3/2007 
3/4/2007 
3/5/2007 
3/6/2007 
+0

怎么来的WL以红色突出显示在这里? – 2011-10-30 04:43:36

1

这听起来像一个非常长的出租车旅程,需要几天和夜晚!

我认为你需要定义什么是白天和黑夜,以便获得完美的答案。您还需要考虑夏令时对您的计算有什么影响。

如果说:

  • 一天是从早上6点到下午6点
  • 夜期间被其余的 - 从晚上6点到早上6点
  • ,你想真正指望小时而不是几天

在这种情况下,然后计算将要求您:

  • 迭代从的startDateTime一个currentDateTime到endDateTime
  • 选择在currentDateTime增量,以便它跳转到下一次屏障(早上6点,下午6点或endDateTime)
  • 每个循环中,然后添加到您的累计计算numDayHours或numNightHours到目前为止。

需要注意的是:

  • 你可以把这个计算更快沿着
  • 你必须非常小心你正在计算中的时区的方式计算整个天(我只是希望您的出租车不会越过时区边界!)
  • 您需要非常小心当地时间变化 - 特别是“夏令时”类型变化 - 从下午6点到上午6点的时间不总是12小时

一些伪代码:

var numDayHours = 0.0; 
    var numNightHours = 0.0; 

    var current = startDateTime; 

    while (current < endDateTime) 
    { 
     next_hop = calculate_next_hop (current, endDateTime); 

     // select next date time 
     switch (next_hop.hop_type) 
     { 
      case HopType.night_time_hop: 
       numNightHours += next_hop.num_hours; 
       break; 

      case HopType.day_time_hop: 
       numDayHours += next_hop.num_hours; 
       break; 
     } 

     current = next_hop.EndDateTime;   
    } 

    // and here is the result 
    double numDays = numDayHours/12.0; 
    double numHours = numNightHours/12.0; 
相关问题