Flutter Web获取当前微秒时间末尾含三个零,如何精确获取?
Flutter Web 获取微秒级时间的问题解答
为什么
DateTime.now().microsecondsSinceEpoch末尾带三个零?
Flutter Web 底层依赖浏览器的 JavaScript API,DateTime.now()实际上调用了 JS 的Date.now()方法——这个方法只能返回毫秒级的时间戳(从纪元到现在的毫秒数)。当 Flutter 将其转换为微秒时,只是简单乘以 1000,所以结果末尾必然是三个零,并没有真正的微秒精度。有没有办法在Web端获取精确的微秒级时间?
可以借助浏览器的performance.now()API 实现近似的微秒级精度:
这个方法返回页面加载完成后到当前的高精度时间(精度可达微秒级别,不同浏览器可能略有差异),结合Date.now()(纪元毫秒时间)就能计算出带微秒精度的纪元时间:import 'dart:js' as js; int getMicrosecondsSinceEpoch() { // 获取纪元毫秒时间 int epochMs = DateTime.now().millisecondsSinceEpoch; // 获取页面加载后的高精度时间(毫秒小数形式) double perfNow = js.context['performance'].callMethod('now'); // 提取小数部分转成微秒,加到纪元毫秒转的微秒上 return epochMs * 1000 + (perfNow % 1 * 1000).round(); }注意:
performance.now()的精度可能会被浏览器做安全限制(比如防指纹追踪),但这已经是Web端能获取的最高精度时间了,虽无法达到原生端真正的微秒级精度,但比单纯的DateTime.now().microsecondsSinceEpoch要精确得多。
内容的提问来源于stack exchange,提问作者Rami Dhouib
相关产品推荐
相关产品推荐

