日期时间中不包括周末
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);
【讨论】:
以上是关于日期时间中不包括周末的主要内容,如果未能解决你的问题,请参考以下文章