Datetime Dart日期时间差

Datetime Dart日期时间差,datetime,dart,difference,Datetime,Dart,Difference,我想设置一个每分钟运行一次的计时器,当我在编写程序时,我发现了这种意想不到的行为 void main() { final now = DateTime.now().toUtc(); final minuteAfterNow = new DateTime(now.year,now.month,now.day,now.hour,now.minute +1,now.second,now.millisecond,now.microsecond); print(minuteAfterNow);

我想设置一个每分钟运行一次的计时器,当我在编写程序时,我发现了这种意想不到的行为

void main() {
  final now = DateTime.now().toUtc();
  final minuteAfterNow = new DateTime(now.year,now.month,now.day,now.hour,now.minute +1,now.second,now.millisecond,now.microsecond);
  print(minuteAfterNow);
  print(now);
  print(minuteAfterNow.difference(now));
}
输出如下:

2020-12-30 09:41:06.508
2020-12-30 09:40:06.508Z
-1:59:00.000000


差不应该输出1分钟吗?这个输出有什么用?

它是不同的,因为有两个问题:

1/您正在比较UTC和非UTC,这将需要额外的偏移:)。我将为您替换代码,并让您自己查看:

 final now = DateTime.now().toUtc();
 final now1 = DateTime.utc(now.year, now.month, now.day,now.hour, now.minute, now.second + 1, now.millisecond, now.microsecond);
 final difference = now.difference(now1);
 print(difference);
2/您错过了秒、毫秒、微秒参数。一旦忽略它,它将默认为零。请看一下Dart中的DateTime类

  DateTime.utc(int year,
      [int month = 1,
      int day = 1,
      int hour = 0,
      int minute = 0,
      int second = 0,
      int millisecond = 0,
      int microsecond = 0])
      : this._internal(year, month, day, hour, minute, second, millisecond,
            microsecond, true);

顺便说一句,请下次添加您的代码。快乐编码:)

是的,我希望差分函数只计算两个日期之间的差,而不检查它们是否为Utc,这是不正确的

 external DateTime._internal(int year, int month, int day, int hour,
      int minute, int second, int millisecond, int microsecond, bool isUtc);
这就是为什么下面的代码给出了所需的输出,即使之前的日期相同

final now = DateTime.now();
  final now2 = now.toUtc();
  final minuteAfterNow = new DateTime(now.year,now.month,now.day,now.hour,now.minute +1,now.second,now.millisecond,now.microsecond).toUtc();
  print(minuteAfterNow);
  print(now2);
  print(minuteAfterNow.difference(now2).inMinutes);
输出:
2020-12-30 09:37:52.559Z
2020-12-30 09:36:52.559Z

1

欢迎来到stackoverflow。请编写代码并以文本形式输出,而不是附加图像。1。一个
DateTime
是本地时间,另一个是UTC时间。2.你忽略了秒。如前所述,不要发布截图。