调用Dart的DateTime.add()方法添加时长后时间值无变化是什么原因?
问题根因
Dart 中的 DateTime 属于不可变类型,add() 方法不会修改原有的 DateTime 实例,而是返回一个添加了指定时长的全新 DateTime 对象。你的代码仅调用了 time.add() 但没有接收该方法的返回值,原有 time 变量存储的始终是初始时间,打印结果自然不会有变化。
修正方案
将 add() 方法的返回值重新赋值给 time 变量即可实现预期效果:
Timestamp timestamp = document.get("timestamp"); DateTime time = timestamp.toDate(); time = time.add(const Duration(hours: 3)); print(time);
注意事项
DateTime的subtract()等修改类方法均遵循相同设计,所有修改操作都需要接收返回值才能拿到更新后的时间- 对时间精度要求高的场景下,注意
add方法默认是按本地时区计算的,如有UTC时间需求需要先调用toUtc()再做计算
内容的提问来源于stack exchange,提问作者Lorenzo Cutrupi
相关产品推荐
相关产品推荐

