2014-05-14 54 views
0

我有這樣發現從開始日期的結束日期與除去延遲

public static DateTime Final_Date_Provider(DateTime start, TimeSpan offset) 
{  
//code  
} 

此方法的梅索德應該caclcule結束日期= START +偏移

問題是:

我希望它能夠從早上8點到下午5點完成,並取消延遲12至12:30。

更新!

public static DateTime Final_Date_Provider(DateTime start, TimeSpan offset) 
{  
    const int hoursPerDay = 8; 
    const int startHour = 8; 

    // Don't start counting hours until start time is during working hours 
    if (start.TimeOfDay.TotalHours > startHour + hoursPerDay) 
     start = start.Date.AddDays(1).AddHours(startHour); 

    if (start.TimeOfDay.TotalHours < startHour) 
     start = start.Date.AddHours(startHour); 


    if (start.DayOfWeek == DayOfWeek.Saturday) 
     start.AddDays(2); 
    else if (start.DayOfWeek == DayOfWeek.Sunday) 
     start.AddDays(1); 

    // Calculate how much working time already passed on the first day 
    TimeSpan firstDayOffset = 
     start.TimeOfDay.Subtract(TimeSpan.FromHours(startHour)); 

    // Calculate number of whole days to add 
    int wholeDays = (int)(offset.Add(firstDayOffset).TotalHours/hoursPerDay); 

    // How many hours off the specified offset does this many whole days consume? 
    TimeSpan wholeDaysHours = TimeSpan.FromHours(wholeDays * hoursPerDay); 

    // Calculate the final time of day based on the number of whole days spanned and the specified offset 
    TimeSpan remainder = offset - wholeDaysHours; 

    // How far into the week is the starting date? 
    int weekOffset = ((int)(start.DayOfWeek + 7) - (int)DayOfWeek.Monday) % 7; 

    // How many weekends are spanned? 
    int weekends = (int)((wholeDays + weekOffset)/5); 

    // Calculate the final result using all the above calculated values  
    return start.AddDays(wholeDays + weekends * 2).Add(remainder); 
} 
+0

你能後至今你已經嘗試的代碼? – Baldrick

回答

0

可以使用CalendarDateAddTime Period Library for .NET的:

// ---------------------------------------------------------------------- 
public void FinalDateProvider() 
{ 
    DateTime now = new DateTime(2014, 5, 16, 9, 0, 0); 
    TimeSpan offset = new TimeSpan(15, 0, 0); 
    Console.WriteLine("{0} + {1} = {2}", now, offset, CalcFinalDate(now, offset)); 
} // FinalDateProvider 

// ---------------------------------------------------------------------- 
public DateTime? CalcFinalDate(DateTime start, TimeSpan offset) 
{ 
    CalendarDateAdd dateAdd = new CalendarDateAdd(); 
    dateAdd.AddWorkingWeekDays(); 
    dateAdd.WorkingHours.Add(new HourRange(8, 12)); 
    dateAdd.WorkingHours.Add(new HourRange(new Time(12, 30), new Time(17))); 
    return dateAdd.Add(start, offset); 
} // CalcFinalDate 
0

試着這麼做:

public static DateTime Final_Date_Provider(DateTime start, TimeSpan offset) 
{ 
    // If DateTime.Now is between 8 am and 5pm 
    // If DateTime.Now is not between 12 and 12:30 
    // DateTime changed = start.Add(offset); 

    // If Sunday || Holiday 
    // Do something different 

    return changed; 
} 
相關問題