2011-03-19 46 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; 
相關問題