Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用std.datetime向日期添加天数_Date_D - Fatal编程技术网

使用std.datetime向日期添加天数

使用std.datetime向日期添加天数,date,d,Date,D,为什么不允许在std.datetime中为日期添加天数?您可以添加月份和年份,但不能添加天数 最近,我不得不计算复活节星期日的日期,然后我不得不通过在最后一个日期加上一定数量的天数(39天、10天、7天、4天)来计算相关的假期(阿森松岛、五旬节、三位一体、圣体) 我最终使用了dayOfYear: date.dayOfYear(date.dayOfYear + offset); 这很有效,但仅仅是因为我留在了同一年之内。如果我必须在12月28日之前再加50天呢 有没有一种我忽略了的简单方法?您可

为什么不允许在std.datetime中为日期添加天数?您可以添加月份和年份,但不能添加天数

最近,我不得不计算复活节星期日的日期,然后我不得不通过在最后一个日期加上一定数量的天数(39天、10天、7天、4天)来计算相关的假期(阿森松岛、五旬节、三位一体、圣体)

我最终使用了dayOfYear:

date.dayOfYear(date.dayOfYear + offset);
这很有效,但仅仅是因为我留在了同一年之内。如果我必须在12月28日之前再加50天呢


有没有一种我忽略了的简单方法?

您可以使用
roll
方法:

date.roll!"days"(50);

您可以使用
roll
方法:

date.roll!"days"(50);

我确实忽略了这一点:你可以使用dayOfGregorianCal:

import std.stdio, std.datetime;

void main() {
    auto d = Date(2012, 12, 28); 
    writeln(d);    // 2012-Dec-28
    d.dayOfGregorianCal(d.dayOfGregorianCal + 50); 
    writeln(d);    // 2013-Feb-16
}

我确实忽略了这一点:你可以使用dayOfGregorianCal:

import std.stdio, std.datetime;

void main() {
    auto d = Date(2012, 12, 28); 
    writeln(d);    // 2012-Dec-28
    d.dayOfGregorianCal(d.dayOfGregorianCal + 50); 
    writeln(d);    // 2013-Feb-16
}

您可以从
core.time
使用
Duration
。 导入
std.datetime
将导入
core.time
,因此您可以按如下方式直接使用它

import std.stdio, std.datetime;

void main() {
  auto date = Date(2013, 12, 28);
  writefln("%s + %s = %s", date, 10.days(), date + 10.days());
}
顺便说一句,
days()
dur!“days”(
它构造了一个
持续时间
结构。
查看
core.time
的文档了解更多信息。

您可以使用
core.time
中的
Duration
。 导入
std.datetime
将导入
core.time
,因此您可以按如下方式直接使用它

import std.stdio, std.datetime;

void main() {
  auto date = Date(2013, 12, 28);
  writefln("%s + %s = %s", date, 10.days(), date + 10.days());
}
顺便说一句,
days()
dur!“days”(
它构造了一个
持续时间
结构。 查看
core.time
的文档了解更多信息。

如果您还没有阅读std.datetime,那么您可能应该阅读,因为它可能会回答您关于如何使用它的最基本问题

但一般来说,在std.datetime(
SysTime
datetime
Date
Date
,或
TimeOfDay
)中的任何时间点类型中,都应该使用它来添加和减去单位。所以,你会得到这样的代码

auto date = Date(2012, 12, 21);
date += dur!"days"(50);

(模板化的
dur
函数是生成
Duration
的通用方法,但它支持的每个单位都有别名,因此
seconds(5)
22.minutes()
等功能也可以使用)

添加
功能适用于
“月”
“年”
,因为
持续时间
不能容纳月或年(因为您无法在没有特定日期的情况下将其与较小的单位进行转换),并且需要有一种将月或年添加到时间点的方法。此外,还有一个问题,当你在一个日期上加上或减去一个月或一年,并且它移动到的月份不包括那一天时,该怎么办,因此
add
接受
AllowDayOverflow
以控制它(对于较小的单位来说这是不必要的)

但是
add
不接受任何其他单位,因为您可以简单地使用带有
持续时间的常规算术运算。此外,减去两个时间点将导致持续时间

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
接受类型中的所有单位,而不仅仅是
“月”
“年”
,但这是因为它执行的操作与
+
不同,因此添加或减去
持续时间将不起作用(因为已经添加或减去了)。相反,
roll
添加到特定单元,而不添加到其他单元

auto d = Date(2010, 1, 1);
d.roll!"days"(33);
assert(d == Date(2010, 1, 3));
如果你还没有读过std.datetime,那么你可能应该读,因为它可能会回答你关于如何使用它的最基本的问题

但一般来说,在std.datetime(
SysTime
datetime
Date
Date
,或
TimeOfDay
)中的任何时间点类型中,都应该使用它来添加和减去单位。所以,你会得到这样的代码

auto date = Date(2012, 12, 21);
date += dur!"days"(50);

(模板化的
dur
函数是生成
Duration
的通用方法,但它支持的每个单位都有别名,因此
seconds(5)
22.minutes()
等功能也可以使用)

添加
功能适用于
“月”
“年”
,因为
持续时间
不能容纳月或年(因为您无法在没有特定日期的情况下将其与较小的单位进行转换),并且需要有一种将月或年添加到时间点的方法。此外,还有一个问题,当你在一个日期上加上或减去一个月或一年,并且它移动到的月份不包括那一天时,该怎么办,因此
add
接受
AllowDayOverflow
以控制它(对于较小的单位来说这是不必要的)

但是
add
不接受任何其他单位,因为您可以简单地使用带有
持续时间的常规算术运算。此外,减去两个时间点将导致持续时间

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
接受类型中的所有单位,而不仅仅是
“月”
“年”
,但这是因为它执行的操作与
+
不同,因此添加或减去
持续时间将不起作用(因为已经添加或减去了)。相反,
roll
添加到特定单元,而不添加到其他单元

auto d = Date(2010, 1, 1);
d.roll!"days"(33);
assert(d == Date(2010, 1, 3));

以前在工作日(d_time t)有一个函数;但是现在它已经被弃用了,我想通过解析它,你仍然可以使用它,这里曾经是一个在工作日(d_timet)的函数;但是现在它已经被弃用了,我认为通过解析它,roll方法仍然可以使用它,它不会影响更大的单位,比如月或年。然后你可以使用
add
。不要问为什么有两种方法。@ukaszNiemier,因为
add
roll
做不同的事情<代码>添加
之所以存在,是因为
持续时间
不适用于月或年(因为您无法在没有特定日期的情况下将其转换为较小的单位)<代码>滚动
另一方面