我尝试从数据库中获取一个int值来构造一个DateTime对象,但是返回的对象与原始对象不相等,下面是一些测试代码:
void main() {
final d = DateTime.now();
final ms = d.millisecondsSinceEpoch;
final d1 = DateTime.fromMillisecondsSinceEpoch(ms).;
print(d);
print(d1);
print(d1 == d);
}
输出(在android studio中作为控制台应用运行):
2020-03-18 20:57:14.887582
2020-03-18 20:57:14.887
false
但是,在DartPad中运行这段代码会输出两个对象相等,我遗漏了什么?
1条答案
按热度按时间92dk7w1h1#
然而,在DartPad中运行这段代码会输出两个对象相等。
当你在网络上运行Dart代码时,包括DartPad,注意打印
DateTime.now()
的结果并不 * 打印微秒精度的时间。因此你的问题实际上 * 不是 * 关于相等性检查(两个对象确实表示相同的时间并且应该相等),这就是为什么DateTime
在DartPad中不如在其他平台上精确。现代的网页浏览器已经显式地降低了计时器的精确度,以阻止基于计时的攻击(例如Spectre)。
此外,Dart for web被移植到JavaScript,并且也受到JavaScript的限制。JavaScript
Date
objects不支持微秒,因此DartDateTime
对象在该环境中也不会报告微秒。(另请参见https://github.com/dart-lang/sdk/issues/44876.)