2011-03-15 69 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