DateTime和duration add

时间:2014-10-21 12:38:18

标签: dart

请考虑以下代码:

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的

3 个答案:

答案 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