日期时间中不包括周末

Posted

技术标签:

【中文标题】日期时间中不包括周末【英文标题】:Do not include weekends in date time 【发布时间】:2015-03-13 07:16:09 【问题描述】:

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

编辑:(当我输入数字时程序突然冻结)

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");
    

【问题讨论】:

您目前正在尝试的一些代码会有所帮助。 “不包括周末”是什么意思?您要执行什么计算? Access 从哪里来?您的问题太模糊,我们目前无法为您提供帮助。 (我怀疑实际上你会想要排除公共假期和其他事情......) 如果像@JonSkeet 建议的那样,除了周末之外,您还需要考虑法定(公共)假期,那么您可能需要使用日期表。这种方法的一个简单示例是我的另一个答案here。 我现在有我的代码了。请参阅我的帖子中的编辑。谢谢 对,所以您实际上要做的是“添加天数,不包括周末”。根据“计算日期时间”,这一点都不清楚。我还强烈建议您将计算与 GUI 更新和一般文本处理分开。 【参考方案1】:

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

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

【讨论】:

使用枚举值名称而不是转换为 int 会更清楚。根本就明显值 6 代表什么,例如... 您好,虽然这可能很好地回答了这个问题,但请注意,其他用户可能不像您那样知识渊博。您为什么不添加一些关于此代码为何有效的解释?谢谢! 我现在有我的代码了。在我的帖子中看到它作为编辑。谢谢 将此行移到 if 条件外 span = span.AddDays(1);【参考方案3】:

有很多更有效的方法可以长时间执行此操作,但如果您的代码只处理较小的值,您可以使用:

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 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;

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

【讨论】:

【参考方案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);
        

【讨论】:

以上是关于日期时间中不包括周末的主要内容,如果未能解决你的问题,请参考以下文章

选择日期+3天,不包括周末和节假日

添加缺失的报告日期,不包括具有指定值的周末

如何计算日期但不包括微软访问中的周末?

如何在当前日期和当前日期 + 2 之间提取数据但不包括周末?

访问 SQL 减去日期,不包括周末

Impala 获得 2 个日期之间的差异,不包括周末