我正在寻找一个Date::Manip与业务/假日日期类似的Perl模块的C#类/库.在Perl中使用该模块,我可以传递一个日期并查明它是一个工作日(即周一至周五)还是假日.在配置文件中定义假期非常简单(请参阅参考资料Date::Manip::Holidays).您可以输入适用于每年的"固定"日期,例如:
12/25 = Christmas
Run Code Online (Sandbox Code Playgroud)
或者每年的"动态"日期,如:
last Monday in May = Memorial Day
Run Code Online (Sandbox Code Playgroud)
或者给定年份的"固定"日期,如:
5/22/2010 = Bob's Wedding
Run Code Online (Sandbox Code Playgroud)
您还可以传递日期并返回下一个/上一个工作日.
有没有人知道C#世界中有类似的东西?我发现了一些实现我需要的部分的东西(http://www.codeproject.com/KB/cs/busdatescalculation.aspx和http://www.codeproject.com/KB/dotnet/HolidayCalculator. aspx)我可以将它们拆开并制作我需要的东西.但如果其他人已经这样做了,为什么还要这样呢?
liv*_*ve2 34
Nager.Date支持超过90个国家(美国,德国,法国,法国,英国,...),该库可用于.net45和.netstandard 2.0.完整的国家/地区列表可在github页面上找到.
的NuGet
PM> install-package Nager.Date
Run Code Online (Sandbox Code Playgroud)
例:
获取一年的所有公共假日
var publicHolidays = DateSystem.GetPublicHoliday(2018, CountryCode.DE);
Run Code Online (Sandbox Code Playgroud)
检查公共假日的日期
var date = new DateTime(2018, 01, 01);
if (DateSystem.IsPublicHoliday(date, CountryCode.DE))
{
//Yes - New Year's Day
}
Run Code Online (Sandbox Code Playgroud)
Tod*_*gel 23
派对有点晚了,但想想它会帮助其他人搜索它.在http://geekswithblogs.net/wpeck/archive/2011/12/27/us-holiday-list-in-c.aspx上找到了一个很好的答案.它甚至考虑到周末假期.
private static HashSet<DateTime> GetHolidays(int year)
{
HashSet<DateTime> holidays = new HashSet<DateTime>();
// New Years
DateTime newYearsDate = AdjustForWeekendHoliday(new DateTime(year, 1, 1));
holidays.Add(newYearsDate);
// Memorial Day -- last monday in May
DateTime memorialDay = new DateTime(year, 5, 31);
DayOfWeek dayOfWeek = memorialDay.DayOfWeek;
while (dayOfWeek != DayOfWeek.Monday)
{
memorialDay = memorialDay.AddDays(-1);
dayOfWeek = memorialDay.DayOfWeek;
}
holidays.Add(memorialDay);
// Independence Day
DateTime independenceDay = AdjustForWeekendHoliday(new DateTime(year, 7, 4));
holidays.Add(independenceDay);
// Labor Day -- 1st Monday in September
DateTime laborDay = new DateTime(year, 9, 1);
dayOfWeek = laborDay.DayOfWeek;
while(dayOfWeek != DayOfWeek.Monday)
{
laborDay = laborDay.AddDays(1);
dayOfWeek = laborDay.DayOfWeek;
}
holidays.Add(laborDay);
// Thanksgiving Day -- 4th Thursday in November
var thanksgiving = (from day in Enumerable.Range(1, 30)
where new DateTime(year, 11, day).DayOfWeek == DayOfWeek.Thursday
select day).ElementAt(3);
DateTime thanksgivingDay = new DateTime(year, 11, thanksgiving);
holidays.Add(thanksgivingDay);
// Christmas Day
DateTime christmasDay = AdjustForWeekendHoliday(new DateTime(year, 12, 25));
holidays.Add(christmasDay);
// Next year's new years check
DateTime nextYearNewYearsDate = AdjustForWeekendHoliday(new DateTime(year + 1, 1, 1));
if (nextYearNewYearsDate.Year == year)
holidays.Add(nextYearNewYearsDate);
return holidays;
}
public static DateTime AdjustForWeekendHoliday(DateTime holiday)
{
if (holiday.DayOfWeek == DayOfWeek.Saturday)
{
return holiday.AddDays(-1);
}
else if (holiday.DayOfWeek == DayOfWeek.Sunday)
{
return holiday.AddDays(1);
}
else
{
return holiday;
}
}
Run Code Online (Sandbox Code Playgroud)
我找不到任何完全符合我想要的功能,因此我使用了http://www.codeproject.com/KB/dotnet/HolidayCalculator.aspx中的代码并对其进行了修改以满足我的需求。它完成了我需要的大部分功能,因此不需要太多调整。
| 归档时间: |
|
| 查看次数: |
51900 次 |
| 最近记录: |