2011-11-14 11 views
-2

ここで唯一の矛盾は、2つのendDate(コードで10,15)のmin値が同じstartDate(25)になる場合です。複数の日付の差分(C言語)#

解決策:これらの2分のうち最小値を取りたいです。競合するendDateによって指定される値。私はあなたの質問が悪い私は、私はあなたがやろうとしているかを理解するために管理信じて提示されている上で上記の紳士に同意しないが

public class DateController : Controller 
    public ActionResult date() 
    { 
     int allDiff; 
     List<int> list=new List<int>(); 
     int flag = 0; 

     DateTime[] startDate = new DateTime[3]; 
     startDate[0] = new DateTime(2011, 11, 5); 
     startDate[1] = new DateTime(2011, 11, 7); 
     startDate[2] = new DateTime(2011, 11, 25); 

     DateTime[] endDate = new DateTime[3]; 
     endDate[0] = new DateTime(2011, 11, 10); 
     endDate[1] = new DateTime(2011, 11,15); 
     endDate[2] = new DateTime(2011, 11, 30); 
     DateTime Min= startDate.Min(); 
     DateTime Max = endDate.Max(); 

     TimeSpan span = Max - Min; 
     int total = span.Days; 
     ViewBag.globalTotal = total; 


     foreach (DateTime e in endDate) 
     { 

      foreach (DateTime s in startDate) 
      { 
       if (s >= e) 
       { 
        TimeSpan span1 = s - e; 
        allDiff = span1.Days; 
        list.Add(allDiff); 
        flag = 1; 

       } 
       else { 
        flag = 0; 
       } 

      } 
      if (flag == 1) 
      { 
       int m = list.Min(); 
       ViewBag.dhiraj = m; 
       total = total - m; 
       list.Clear(); 
      } 

     } 
     ViewBag.Total = total; 

     return View(); 
    } 
+5

1:あなたは「NEEDのHELP」を書き込まないでなければなりません - ここに掲載する誰もが助け;-) 2を必要とする:あなたの質問は少し混乱です。何を本当に知りたいですか? – Fischermaen

+0

複数の日付差分を計算したいのですが... diffに重複した日とギャップb/wの2つの日付..like startDate = 2011/11/05 and 2011/11/25 endDate = 2011/11/10と2011/11/20の出力は10日にする必要があります – RollerCosta

+0

別の考慮事項::重複... startDate:2011/11/05と2011/11/07 endDate:2011/11/10と2011/11/15が必要ですOUTPUT 10days – RollerCosta

答えて

0

作業コード

public ActionResult date() 
    { 
     int j = 0; 
     int output = 0; 
     DateTime[] startDate = new DateTime[6]; 

     startDate[0] = new DateTime(2011, 11, 1); 
     startDate[1] = new DateTime(2011, 11, 6); 
     startDate[2] = new DateTime(2011, 11, 16); 
     startDate[3] = new DateTime(2011, 11, 17); 
     startDate[4] = new DateTime(2011, 11, 17); 
     startDate[5] = new DateTime(2011, 11, 17); 




     DateTime[] endDate = new DateTime[6]; 
     endDate[0] = new DateTime(2011, 11, 4); 
     endDate[1] = new DateTime(2011, 11, 8); 
     endDate[2] = new DateTime(2011, 11, 18); 
     endDate[3] = new DateTime(2011, 11, 17); 
     endDate[4] = new DateTime(2011, 11, 22); 
     endDate[5] = new DateTime(2011, 11, 19); 

     //5-7 
               //7-9 
               //15-20 
     List<DateTime> start = new List<DateTime>(); 
     List<DateTime> end = new List<DateTime>(); 

     DateTime interStart = default(DateTime); 
     DateTime interEnd = default(DateTime);//initialize 
     start.Add(interStart); 
     end.Add(interEnd); 



     for (int i = 0; i < startDate.Length ; i++) 
     { 
      if(i < (startDate.Length-1)){ 
       j=i+1; 
      } 
      else{ 
       j = i; 
      } 

      if ((startDate[i] <= endDate[j]) && (endDate[i] >= startDate[j])) 
      { 


       List<DateTime> intermediateStart = new List<DateTime>(); 
       intermediateStart.Add(startDate[i]); 
       intermediateStart.Add(startDate[j]); 
       interStart = intermediateStart.Min(); 
       List<DateTime> intermediateEnd = new List<DateTime>(); 
       intermediateEnd.Add(endDate[i]); 
       intermediateEnd.Add(endDate[j]); 
       interEnd = intermediateEnd.Max(); 


       if ((start.Last() <= interEnd) && (end.Last() >= interStart)) 
       { 

         List<DateTime> finalStartValue = new List<DateTime>(); 
         finalStartValue.Add(start.Last()); 
         finalStartValue.Add(interStart); 
         List<DateTime> finalEndValue = new List<DateTime>(); 
         finalEndValue.Add(end.Last()); 
         finalEndValue.Add(interEnd); 

         DateTime finalStart = finalStartValue.Min(); 
         DateTime finalEnd = finalEndValue.Max(); 


         start.Remove(start.Last()); 
         end.Remove(end.Last()); 
         start.Add(finalStart); 
         end.Add(finalEnd); 
       } 
       else 
       { 
        start.Add(interStart); 
        end.Add(interEnd); 
       } 

      } 
      else 
      { 
       start.Add(startDate[i]); 
       end.Add(endDate[i]); 
       //remove(start.first); 
      } 
     } 
     int count=(start.Count())-1; 
     for (int k = 0; k <= count; k++) { 
      TimeSpan span = end[k]-start[k]; 
      int diff = span.Days; 
      output = diff + output; 

     } 


      ViewBag.finalOutput = output; 

      return View(); 
    } 
}} 
0

、次のようにループのためのあなたの2を置き換える:

//Create list of startdates that are greater than any of the end dates 
//and return the differences in days 
var list = from s in startDate 
      from e in endDate 
      where s > e 
      select (s-e).Days; 

//If any were found, take out the min of those 
int dhiraj = list.Count() == 0 ? 0 : list.Min(); 
//Update total 
total -= dhiraj; 
+0

ここで、「合計」とは何ですか? – V4Vendetta

+0

@ V4Vendetta彼は自分のコードの続きで、彼は合計を定義します。私が言ったように、このコードブロックは二重foreachループだけを置き換えます – edvaldig