我有一个场景,我希望从今天起算的8个工作日内查找日期。假设今天的日期是04/21/10。现在我想显示日期是04/09 / 10.Weekends应该被排除在外。
例如。 如果今天的日期是04/21/10
减去周末: 星期六 - 04/10/10,04/17/10 周日-04/11 / 10,04 / 18/10
输出结果是04/09/10。
我想用C#做这件事。
任何帮助或建议都会有所帮助。
谢谢, 萨米特
答案 0 :(得分:4)
显然有很多的方法可以做到这一点,但也许有一些有趣的发电机。我使用了扩展方法,但使用了YMMV。因此,确定您是否需要使您的代码具有文化意识(或根据您的需要,您需要的任何描述者)等等
public static class DateTimeExtensions
{
public static IEnumerable<DateTime> Forwards(this DateTime dateTime)
{
return dateTime.Forwards(TimeSpan.FromDays(1));
}
public static IEnumerable<DateTime> Forwards(this DateTime dateTime, TimeSpan span)
{
while (true)
{
yield return dateTime += span;
}
}
public static IEnumerable<DateTime> Backwards(this DateTime dateTime)
{
return dateTime.Backwards(TimeSpan.FromDays(1));
}
public static IEnumerable<DateTime> Backwards(this DateTime dateTime, TimeSpan span)
{
return dateTime.Forwards(-span);
}
public static bool IsWorkingDay(this DateTime dateTime)
{
return dateTime.IsWorkingDay(Thread.CurrentThread.CurrentUICulture);
}
public static bool IsWorkingDay(this DateTime dateTime, CultureInfo culture)
{
return !dateTime.IsWeekend(culture)
&& !dateTime.IsHoliday(culture);
}
public static bool IsWeekend(this DateTime dateTime)
{
return dateTime.IsWeekend(Thread.CurrentThread.CurrentUICulture);
}
public static bool IsWeekend(this DateTime dateTime, CultureInfo culture)
{
// TOOD: Make culturally aware
return dateTime.DayOfWeek == DayOfWeek.Saturday
|| dateTime.DayOfWeek == DayOfWeek.Sunday;
}
public static bool IsHoliday(this DateTime dateTime)
{
return dateTime.IsHoliday(Thread.CurrentThread.CurrentUICulture);
}
public static bool IsHoliday(this DateTime dateTime, CultureInfo culture)
{
throw new NotImplementedException("TODO: Get some culture aware holiday data");
}
}
然后使用DateTime生成器为某些LINQ表达式提供动力:
// Display every holiday from today until the end of the year
DateTime.Today.Forwards()
.TakeWhile(date => date.Year <= DateTime.Today.Year)
.Where(date => date.IsHoliday())
.ForEach(date => Console.WriteLine(date));
你得到了照片
答案 1 :(得分:3)
你可以在这里找到一些好的解释
http://codeasp.net/blogs/Vijjendra/microsoft-net/765/calculate-business-days-in-asp-net-c
答案 2 :(得分:1)
答案 3 :(得分:0)
这是非常愚蠢的算法,但它可以工作8天。如果开始日是周一至周三(包括),则添加 10 天,否则 12 。更一般的是循环添加一天,检查是否是工作日。
答案 4 :(得分:0)
只有七种情况需要考虑,因此我会根据一周中的某天计算减去实际天数(显然不完整或经过测试):
switch (dayOfWeek)
{
case DayOfWeek.Monday :
case DayOfWeek.Tuesday :
case DayOfWeek.Wednesday :
return 12;
case DayOfWeek.Thursday :
case DayOfWeek.Friday :
case DayOfWeek.Saturday :
return 10;
case DayOfWeek.Sunday :
return 11;
}
答案 5 :(得分:0)
var desiredDate = DateTime.Now.SubtractBusinessDays(8);
在Codeplex上使用Fluent DateTime项目。
答案 6 :(得分:0)
{{1}}