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