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
기능 (특정 날짜없이 그들과 작은 단위 사이의 변환을 할 수 없기 때문에)을 Duration
이 달 또는 몇 년을 보유 할 수 없기 때문에, "months"
및 "years"
을 위해 존재하고 추가 할 수있는 방법이있을 필요가있다 몇 달 또는 몇 해를 한 시점으로 또한 한 달 또는 한 달을 날짜에 더하거나 뺄 때해야 할 일의 질문이 있습니다. 이동하는 달에는 해당 날짜가 포함되지 않으므로 add
은이를 제어하기 위해 을 허용합니다. 더 작은 단위들과 함께 필요함).당신은 단순히 Duration
와 일반 산술 연산을 사용할 수 있기 때문에
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
이됩니다. (같은
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 당신은 여전히 그것을 파싱하여 생각할 수 있습니다. –