Если я наберу
DateString[{2011, 2, 29, 0, 0, 0}, {"DayName"}]
Это дает "Tuesday".
"Tuesday"
А также,
DateString[{2011, 3, 1, 0, 0, 0}, {"DayName"}]
Needs["Calendar`"]; myDay[x_List] := DateString[x, {"DayName"}] /; DateQ[x] myDay[{2000, 1, 1}] ->"Saturday" myDay[{2000, 13, 13}] ->myDay[{2000, 13, 13}]
Конечно, вы можете выбросить сообщение (или прервать [], или что-то еще), если хотите:
Needs["Calendar`"]; Clear@myDay; myDay[x_] /; If[DateQ[x], True, Message[myDay::nodate, x]; False] := DateString[x, {"DayName"}] myDay::nodate = "The argument `1` is not a valid date.";
Это выглядит как правильное поведение. Документация для DateString гласит: «Значения m, d, h, m, s вне их нормальных диапазонов соответственно уменьшены». именно это и произошло: на самом деле 29 февраля этого года не было, но если бы это было, то это был бы тот же день, что и 1 марта, то есть действительно вторник.
DateString