C# 日期时间中不包括周末

C# 日期时间中不包括周末,c#,ms-access,C#,Ms Access,我只是想知道如何在不包括周末的情况下计算DateTime(目前正在制作一个库系统)。图书馆周末不开放,这就是为什么我需要计算不包括周末的日期。 前任。 03/13/15=周五,我借了5天。所以,返回日期应该是3/20/15=星期五(因为我没有包括周末) 你能告诉我或者给我一些想法吗?谢谢 编辑:(当我键入一个数字时,程序突然冻结) int天=0; DateTime deyt=DateTime.Now; rd.Text=deyt.ToString(“MM/dd/yy”); DateTime dt=

我只是想知道如何在不包括周末的情况下计算DateTime(目前正在制作一个库系统)。图书馆周末不开放,这就是为什么我需要计算不包括周末的日期。 前任。 03/13/15=周五,我借了5天。所以,返回日期应该是3/20/15=星期五(因为我没有包括周末) 你能告诉我或者给我一些想法吗?谢谢

编辑:(当我键入一个数字时,程序突然冻结)

int天=0;
DateTime deyt=DateTime.Now;
rd.Text=deyt.ToString(“MM/dd/yy”);
DateTime dt=deyt.AddDays(int.Parse(textBox3.Text));
日期时间跨度=deyt;
而(跨度
如果您有日期时间列表,您可以过滤掉周末日期:

public static List<DateTime> GetDatesWithoutWeekends(List<DateTime> dates)
{
    return
        dates.Where(date => (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday))
                .ToList();
}
publicstaticlist GetDatesWithoutWeekends(列表日期)
{
返回
dates.Where(date=>(date.DayOfWeek!=DayOfWeek.Saturday&&date.DayOfWeek!=DayOfWeek.Sunday))
.ToList();
}

如果您有日期时间列表,您可以过滤掉周末日期:

public static List<DateTime> GetDatesWithoutWeekends(List<DateTime> dates)
{
    return
        dates.Where(date => (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday))
                .ToList();
}
publicstaticlist GetDatesWithoutWeekends(列表日期)
{
返回
dates.Where(date=>(date.DayOfWeek!=DayOfWeek.Saturday&&date.DayOfWeek!=DayOfWeek.Sunday))
.ToList();
}

有很多更有效的方法来处理大量的工作日,但是如果您的代码只处理较小的值,您可以使用:

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;
}
static DateTime adddays包括周末(DateTime start,int days)
{
//你需要这个吗?
如果(天数<0)
{
抛出新ArgumentException(“尚未实现…”);
}
日期时间当前=开始;
对于(int i=0;i
或另一种方法:

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;
}
static DateTime adddays包括周末(DateTime start,int days)
{
//你需要这个吗?
如果(天数<0)
{
抛出新ArgumentException(“尚未实现…”);
}
日期时间当前=开始;
对于(int i=0;i

请注意,如果传入天数=0,即使是在周末,也会返回原始日期。现在还不清楚您是否想要这种行为,或者是否应该跳到星期一。

有很多更有效的方法可以在很多天内这样做,但是如果您的代码只处理较小的值,您可以使用:

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;
}
  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);
        }
static DateTime adddays包括周末(DateTime start,int days)
{
//你需要这个吗?
如果(天数<0)
{
抛出新ArgumentException(“尚未实现…”);
}
日期时间当前=开始;
对于(int i=0;i
或另一种方法:

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;
}
static DateTime adddays包括周末(DateTime start,int days)
{
//你需要这个吗?
如果(天数<0)
{
抛出新ArgumentException(“尚未实现…”);
}
日期时间当前=开始;
对于(int i=0;i
请注意,如果传入天数=0,即使是在周末,也会返回原始日期。现在还不清楚你是否想要这种行为,或者是否应该跳到周一。

这是你的代码。。。尝试
  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);
        }
整数天=0; DateTime deyt=DateTime.Now; DateTime dt=deyt.AddDays(int.Parse(textBox3.Text)); 日期时间跨度=deyt; 而(span
这是您的代码…请尝试。。
整数天=0;
DateTime deyt=DateTime.Now;
DateTime dt=deyt.AddDays(int.Parse(textBox3.Text));
日期时间跨度=deyt;

虽然(跨越您当前尝试的一些代码会有所帮助。您所说的“不包括周末”是什么意思?您尝试执行的计算是什么?访问从何而来?您的问题太模糊,我们目前无法帮助您。(我怀疑,实际上,您希望排除公共假期和其他事情……)如果,正如@JonSkeet所建议的,除了周末之外,您还需要考虑法定(公共)假日,那么您可能需要使用日期表。这种方法的一个简单示例是在我的另一个答案中。我现在有了我的代码。在我的帖子中,请参阅“编辑”。谢谢。好的,所以您实际要做的是“添加天数,不包括周末”。基于“计算日期时间”,这一点并不清楚。我还强烈建议您将计算与GUI更新和一般文本处理分开。您当前尝试的一些代码将有所帮助。您所说的“不包括周末”是什么意思“?您试图执行什么计算?访问从何而来?您的问题是f。”