请考虑以下代码:
void main() {
var duration = new Duration(days : 1);
print ("duration " + duration.toString());
var d1 = new DateTime(2014, 10, 26);
print ("d1 " + d1.toString());
d1 = d1.add(duration);
print ("d1 + duration " + d1.toString());
var d2 = new DateTime(2014, 10, 20);
print ("d2 " + d2.toString());
d2 = d2.add(duration);
print ("d2 + duration " + d2.toString());
}
和输出:
duration 24:00:00.000000
d1 2014-10-26 00:00:00.000
d1 + duration 2014-10-26 23:00:00.000
d2 2014-10-20 00:00:00.000
d2 + duration 2014-10-21 00:00:00.000
为什么10月20日和26日表现不同。我已经检查了一年中每天的相同代码,并且每年都有一天,其中日期+ 1天等于同一天。 每年的日期似乎是10月25日至10月30日。
这是一个错误还是我错过了什么?
此致 Peyman的
答案 0 :(得分:1)
我想10月26日(以及10月25日至10月10日之间的其他日子是由于夏令时结束。 1h(23:00:00.000)的差异表明这是原因。
答案 1 :(得分:0)
根据GünterZöchbauer的回答-这是夏令时。
要正确添加日期,您可以使用以下方法:
var d1 = new DateTime(2014, 10, 26);
var d1 = new DateTime(d1.year, d1.month, d1.day + 1);
答案 2 :(得分:0)
只需在АлександрБабич答案上进行扩展-在构造函数中创建DateTime时,您不必关心当月的天数范围。例如
DateTime(2014, 9, 57)
将正确返回2014-10-27,并且不会引入任何夏令时制。 负数也可以,但是要偏移1,因为0也可以,例如
DateTime(2014, 9, 0)
DateTime(2014, 9, -1)
分别产生2014-08-31和2014-08-30