Today’s Erlang Thursday is covers calendar:day_of_the_week/3.
calendar:day_of_the_week/3
allows you to get the day of the week a day occurred on when passed a year, a month and a day.
The first argument represents the year and must be a non-negative integer. The second argument is the month and must be an integer value between 1 and 12 inclusive, representing the 12 months of the Gregorian Calendar, with January being month one. The final argument to calendar:day_of_the_week/3
is the date, and is expected to be a integer between 1 and 31 inclusive.
calendar:day_of_the_week/3
returns an integer value in between 1 and 7 inclusive, with a return value of 1 representing Monday, and a 7 being Sunday.
calendar:day_of_the_week(1, 1, 1). % 1 calendar:day_of_the_week(1970, 1, 1). % 4 calendar:day_of_the_week(1999, 12, 31). % 5 calendar:day_of_the_week(0, 1, 1). % 6
As you can see that the publish date of this Erlang Thursday post, 2015-04-09, returns a 4, which is in fact a Thursday according to Erlang.
calendar:day_of_the_week(2015, 4, 9). % 4
There is also a calendar:day_of_the_week/1
function which has all the same constraints but instead of taking three arguments, takes one argument that is a three-tuple of the year, month, and day.
calendar:day_of_the_week({2015, 4, 9}). % 4 calendar:day_of_the_week({1970, 1, 1}). % 4 calendar:day_of_the_week({1999, 12, 31}). % 5
And in the spirit of helping to recognize error messages when we see them, let’s take a look at what we get when we pass some invalid inputs to calendar:day_of_the_week/3
.
calendar:day_of_the_week(0, 0, 0). % ** exception error: no function clause matching calendar:date_to_gregorian_days(0,0,0) (calendar.erl, line 114) % in function calendar:day_of_the_week/3 (calendar.erl, line 151) calendar:day_of_the_week(1970, 2, 31). % ** exception error: no true branch found when evaluating an if expression % in function calendar:date_to_gregorian_days/3 (calendar.erl, line 116) % in call from calendar:day_of_the_week/3 (calendar.erl, line 151) calendar:day_of_the_week(1970, 13, 2). % ** exception error: no function clause matching calendar:last_day_of_the_month1(1970,13) (calendar.erl, line 243) % in function calendar:date_to_gregorian_days/3 (calendar.erl, line 115) % in call from calendar:day_of_the_week/3 (calendar.erl, line 151)
If you look at the error messages you see that calendar:day_of_the_week/3
calls calendar:date_to_gregorian_days/3
, which we will cover in next week’s Erlang Thursday.
–Proctor