2011-03-15 64 views
3

如果键入蹊跷DateString在数学

DateString[{2011, 2, 29, 0, 0, 0}, {"DayName"}]

它给"Tuesday"

而且也

DateString[{2011, 2, 29, 0, 0, 0}, {"DayName"}]

DateString[{2011, 3, 1, 0, 0, 0}, {"DayName"}]

回答

6
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`"]; 
[email protected]; 
myDay[x_] /; If[DateQ[x], True, Message[myDay::nodate, x]; False] := 
                 DateString[x, {"DayName"}] 
myDay::nodate = "The argument `1` is not a valid date."; 
6

这看起来对我来说,正确的行为。 DateString的文档说:“m,d,h,m,s在正常范围之外的值可以适当减小。”这就是发生的事情:今年二月二十九日并不是真的,但如果有的话,实际上是三月一号的那一天,实际上是星期二。

+1

我宁愿有一些例外抛出,而不是让这个误导'”星期二“回答!我怎样才能写我自己的包装版本的DateString来实现这一目标?非常感谢。 – 2011-03-15 02:09:25

+2

该文档还给出了[示例](http://reference.wolfram.com/mathematica/ref/DateString.html#47250627)DateString [{2006,2,3}]'=>'2006年3月3日星期五:00:00'。 – WReach 2011-03-15 02:19:15

+1

您可以将一个日期列表提供给'DateList'函数,该函数将“将日期列表转换为标准规范化形式”。所以如果这样做的话日期清单是完好无损的。如果情况并非如此,你可以抛出异常。 – 2011-03-15 03:00:48