如果您還沒有閱讀std.datetime上的this article,那麼您可能應該這樣做,因爲它可能會回答您關於如何使用它的大多數基本問題。
但總的來說,core.time.Duration
是你應該用什麼在std.datetime(SysTime
,DateTime
,Date
,或TimeOfDay
)從任何時間點類型的加法和減法單位。所以,你會得到這樣的代碼
auto date = Date(2012, 12, 21);
date += dur!"days"(50);
或
auto date = Date(2012, 12, 21);
date += days(50);
(模板化dur
功能是生成一個Duration
通用的方式,但它的別名爲每個支持的單位,這樣的東西像seconds(5)
或22.minutes()
也可以工作)。
的add
功能存在"months"
和"years"
,因爲Duration
不能持有幾個月或幾年(因爲你無法將它們與更小的單位之間沒有一個具體的日期轉換),並需要有添加航幾個月或幾年到一個時間點。另外,還有一個問題,當你從一個日期增加或者減去一個月或者一年,並且它移動到的那個月不包括那一天,所以add
接受AllowDayOverflow
以便控制那個(它會小單位不需要)。
auto d3 = Date(2000, 2, 29);
d3.add!"years"(1);
assert(d3 == Date(2001, 3, 1));
auto d4 = Date(2000, 2, 29);
d4.add!"years"(1, AllowDayOverflow.no);
assert(d4 == Date(2001, 2, 28));
但add
不接受其他任何單位,因爲你可以簡單地使用普通的算術運算與Duration
。另外,減去兩個時間點將導致Duration
。
assert(Date(2012, 12, 5) - Date(2002, 11, 17) == dur!"days"(3671));
assert(Date(2012, 12, 5) - dur!"days"(3671) == Date(2002, 11, 17));
不像add
,roll
接受所有單位的類型,而不是僅僅"months"
和"years"
,但這是因爲它是從+
做不同的操作,所以加上或減去Duration
將無法正常工作(如已經增加或減少)。而不是roll
增加到一個特定的單位,而不增加其他。
auto d = Date(2010, 1, 1);
d.roll!"days"(33);
assert(d == Date(2010, 1, 3));
那裏曾經有一個函數int weekDay(d_time t);但現在不推薦使用http://dlang.org/phobos/std_date.html,您仍然可以通過解析它來使用它 –