std.datetime に関するこの記事をまだ読んでいない場合は、使用方法に関する最も基本的な質問におそらく答えているはずです。
しかし、一般的には、std.datetime ( 、、、または)core.time.Durationのいずれかの時点タイプから単位を加算および減算するために使用する必要があるものです。したがって、次のようなコードが得られますSysTimeDateTimeDateTimeOfDay
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()も同様に機能します)。
aは月または年を保持できないため (特定の日付がないと、月または年をより小さな単位に変換できないため)、および 月または年を時点に追加する方法が必要なため、add関数は"months"andに対して存在します。また、日付に月や年を足したり引いたりするときにどうするかという問題があり、移動先の月にはその日が含まれないため、それを制御するために受け入れます(これはそうではありませんより小さなユニットでは必要です)。"years"DurationaddAllowDayOverflow
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。また、2 つの時点を減算すると、 になり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、はandrollだけでなく、型内のすべての単位を受け入れますが、それはとは異なる操作を行っているためです。したがって、 a の加算または減算は機能しません (既に加算または減算されているため)。むしろ、他のユニットに追加することなく、特定のユニットに追加します。"months""years"+Durationroll
auto d = Date(2010, 1, 1);
d.roll!"days"(33);
assert(d == Date(2010, 1, 3));