微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dart 日期时间 .difference

如何解决Dart 日期时间 .difference

我想将计时器设置为每分钟运行一次,在编写程序时我发现了这种意外行为

<div id="insTab"></div>

输出如下:

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.minute +1,now.second,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。