Do not include weekends in date time

纵然是瞬间 提交于 2020-01-11 14:32:14

问题


I just want to know on how to compute DateTime without including weekends (currently making a library system). The library is not open during weekends that is why i need to calculate the date that will not include weekends. Ex. 03/13/15 = friday and im borrowing it for 5 days. So, the return date should be in 03/20/15= friday( because i didnt include the weekends) Can you please tell me or give me some ideas? Thanks!

EDIT: ( The program suddenly freezes when i type a number)

int days = 0;
DateTime deyt = DateTime.Now;
rd.Text = deyt.ToString("MM/dd/yy");
DateTime dt = deyt.AddDays(int.Parse(textBox3.Text));


DateTime span = deyt;
while (span < dt.AddDays(1))
{
    if (span.DayOfWeek != DayOfWeek.Saturday && span.DayOfWeek != DayOfWeek.Sunday)
    {
        days++;
        span = span.AddDays(1);
        bd.Text = days.ToString("MM/dd/yy");
    }
}

回答1:


If you have a list of DateTimes you can filter out the weekend dates:

public static List<DateTime> GetDatesWithoutWeekends(List<DateTime> dates)
{
    return
        dates.Where(date => (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday))
                .ToList();
}



回答2:


DateTime date = DateTime.Now // Set your Date

if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)   
{
//TODO
}



回答3:


There are far more efficient ways of doing this for large numbers of days, but if your code is only ever going to deal with small values, you can just use:

static DateTime AddDaysExcludingWeekends(DateTime start, int days)
{
    // Do you need this?
    if (days < 0)
    {
        throw new ArgumentException("Not implemented yet...");
    }
    DateTime current = start;
    for (int i = 0; i < days; days++)
    {
        current = current.AddDays(1);
        if (current.DayOfWeek == DayOfWeek.Sunday ||
            current.DayOfWeek == DayOfWeek.Saturday)
        {
            // Effectively force "go round again" behaviour.
            i--;
        }
    }
    return current;
}

Or an alternative approach:

static DateTime AddDaysExcludingWeekends(DateTime start, int days)
{
    // Do you need this?
    if (days < 0)
    {
        throw new ArgumentException("Not implemented yet...");
    }
    DateTime current = start;
    for (int i = 0; i < days; days++)
    {
        // Loop at least once, and keep going until we're on
        // a weekday.
        do
        {
           current = current.AddDays(1);
        }
        while (current.DayOfWeek == DayOfWeek.Sunday ||
               current.DayOfWeek == DayOfWeek.Saturday);
    }
    return current;
}

Note that if you pass in days=0, that will return the original date even if it is on a weekend. It's not clear whether or not you want that behaviour, or whether it should skip to the Monday.




回答4:


  This is your code... Try.. 

        int days = 0;
        DateTime deyt = DateTime.Now;
        DateTime dt = deyt.AddDays(int.Parse(textBox3.Text));

        DateTime span = deyt;
        while (span <= dt)
        {
            if (span.DayOfWeek != DayOfWeek.Saturday && span.DayOfWeek != DayOfWeek.Sunday)
            {
                days++;
                bd.Text = days.ToString();
                Console.WriteLine(span.ToString("MM/dd/yy"));
            }
            span = span.AddDays(1);
        }


来源:https://stackoverflow.com/questions/29026733/do-not-include-weekends-in-date-time

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!