Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Datetime dart日期时间差错误(28.3到27.3之间)_Datetime_Dart_Difference - Fatal编程技术网

Datetime dart日期时间差错误(28.3到27.3之间)

Datetime dart日期时间差错误(28.3到27.3之间),datetime,dart,difference,Datetime,Dart,Difference,试试这个: 结果应该是1,而不是0。。。 用任何其他值替换“day”变量,它将给出正确的结果(1) 这是一个bug吗?好吧,问题归结为差分的返回值,即: 差值以秒和秒的分数为单位进行测量。上面的差值计算这些日期开始时午夜之间的小数秒数。如果上述日期是当地时间,而不是UTC,则由于夏令时的差异,两个午夜之间的差异可能不是24小时的倍数 因此,我们从difference中得到的值是一个Duration对象,它包含两个DateTime对象之间的差值(以秒为单位)。然后,您可以要求持续时间以天为单位表

试试这个:

结果应该是1,而不是0。。。 用任何其他值替换“day”变量,它将给出正确的结果(1)


这是一个bug吗?

好吧,问题归结为
差分的返回值,即:

差值以秒和秒的分数为单位进行测量。上面的差值计算这些日期开始时午夜之间的小数秒数。如果上述日期是当地时间,而不是UTC,则由于夏令时的差异,两个午夜之间的差异可能不是24小时的倍数

因此,我们从
difference
中得到的值是一个
Duration
对象,它包含两个
DateTime
对象之间的差值(以秒为单位)。然后,您可以要求
持续时间
以天为单位表示此结果

问题在于,由于3月份的夏令时,许多国家正在调整时钟。事实上,由于我在丹麦,你的例子并没有显示我电脑上的任何错误。因此,我将您的代码更改为:

void main() {
  for (var day = 1; day <= 31; day++) {
    DateTime day1 = DateTime(2020, 3, day);
    DateTime day2 = DateTime(2020, 3, day - 1);
    print('Day $day: inDays: ${day1.difference(day2).inDays} inHours: ${day1.difference(day2).inHours}');
  }
}

因为我们实际上在转换为夏令时时删除了一小时,所以返回的持续时间不包含24小时,而是23小时。

事实上,我们已经转换为夏令时,不知道我是怎么错过的:)非常感谢您的详细回答!很高兴听到这个消息。请把我的帖子标记为答案,除非你还有其他想知道的。
void main() {
  for (var day = 1; day <= 31; day++) {
    DateTime day1 = DateTime(2020, 3, day);
    DateTime day2 = DateTime(2020, 3, day - 1);
    print('Day $day: inDays: ${day1.difference(day2).inDays} inHours: ${day1.difference(day2).inHours}');
  }
}