8
$\begingroup$

I'm building my own HolidayCalendar.

I want some Saturdays to be business days.

But Mathematica considers every Saturday a holiday, even for my HolidayCalendar.

For instance,

DayRange[DateObject[{2020,1,1}], DateObject[{2020,1,31}], "BusinessDay", HolidayCalendar -> { "Gregorian" -> {{True&, #==1&, #==1&}}}] 

gives me no Saturdays and no Sundays, of course.

Is it possible to change this behavior?

$\endgroup$

2 Answers 2

1
$\begingroup$

There doesn't seem to be a straightforward way to just use DayRange[], so one has to use Select[] + Complement[] with DayRange[]:

With[{d0 = DateObject[{2020, 1, 1}], d1 = DateObject[{2020, 1, 31}]}, Select[Complement[DayRange[d0, d1], DayRange[d0, d1, "Holiday", HolidayCalendar -> {"Gregorian" -> {{True &, # == 1 &, # == 1 &}}}]], DayName[#] =!= Sunday &]] 
$\endgroup$
1
  • $\begingroup$ Thank you. Unfortunately, my question is how to change the default behavior of holidaycalendar. Actually, I want to use my own HolidayCalendar in many time series-related functions. Not just to get the list of business days. $\endgroup$ Commented Mar 25, 2020 at 4:31
1
$\begingroup$
Clear["Global`*"] 

Assuming that you want six business day (Mon - Sat) per week

businessDays[start_DateObject, end_DateObject] := Sort[ Complement[ Flatten[ DayRange[start, end, #] & /@ {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}], DayRange[start, end, "Holiday", HolidayCalendar -> {"UnitedStates", "Default"}]]] businessDays[ DateObject[{2020, 1, 1}], DateObject[{2020, 1, 31}]] 

enter image description here

Note that Mon 20 Jan 2020 is also a US holiday.

$\endgroup$
3
  • $\begingroup$ Thank you for your answer. But the reason I'm building my own HolidayCalendar is that I want to use it in many other builtin functions. Maybe I can make a wrapper function for every builtin functions I need. I'm just wondering if I can change the default behavior or not. $\endgroup$ Commented Mar 25, 2020 at 4:26
  • $\begingroup$ @Y.Kwon you can but it is really advised against as it could detrimentally alter other functionality. $\endgroup$ Commented Mar 25, 2020 at 20:20
  • $\begingroup$ @CATrevillian Do you mean that I can make Saturdays business days? In some countries or in some industries, they work on Saturday. I think it should be more flexible about the definition of holidays. $\endgroup$ Commented Mar 26, 2020 at 0:50

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.