datetime - dart DateTime 差异错误(28.3 到 27.3 之间)
问题描述
试试这个(在https://dartpad.dev/中):
int day = 28;
DateTime day1 = DateTime(2020, 3, day);
DateTime day2 = DateTime(2020, 3, day - 1);
print(day1.difference(day2).inDays);
结果应该是 1,取而代之的是 0...用任何其他值替换“day”变量,它会给出正确的结果 (1)...
它是一个错误吗?
解决方案
好吧,问题归结为它的返回值difference
是:
差异以秒和几分之一秒为单位。上面的差异计算了这些日期开始时午夜之间的小数秒数。如果上述日期是当地时间,而不是 UTC,则由于夏令时差异,两个午夜之间的差异可能不是 24 小时的倍数。
https://api.dart.dev/stable/2.7.2/dart-core/DateTime/difference.html
所以我们从中得到的值difference
是一个Duration
包含两个对象之间差异的DateTime
对象,以秒为单位。然后,您可以要求Duration
以天为单位表示此结果。
问题是许多国家正在改变他们的时钟,因为三月份的夏令时。实际上,自从我在丹麦以来,您的示例在我的计算机上没有显示任何错误。所以我把你的代码改成:
void main() {
for (var day = 1; day <= 31; day++) {
DateTime day1 = DateTime(2020, 3, day);
DateTime day2 = DateTime(2020, 3, day - 1);
print('Day $day: inDays: ${day1.difference(day2).inDays} inHours: ${day1.difference(day2).inHours}');
}
}
在我的计算机上返回以下内容:
Day 27: inDays: 1 inHours: 24
Day 28: inDays: 1 inHours: 24
Day 29: inDays: 1 inHours: 24
Day 30: inDays: 0 inHours: 23
Day 31: inDays: 1 inHours: 24
因为我们实际上在更改为夏令时时删除了一天中的一小时,所以返回的持续时间不是 24 小时而是 23 小时。
推荐阅读
- python - TensorFlow Serving 容器进入事件循环后 Heroku Dyno 崩溃
- python-3.x - 将列表传递给 requests.get()
- python - 在 SQLAlchemy(Python)中不存在值的地方返回 null
- android - 如何在 SearchDelegate 的 buildResults 中传递更新 UI 值?
- angular - 如何处理 google firebase web app 的安全性?
- python - 我想将 int KEY 添加到字典中的键值中。所以,我可以得到编码的消息
- powershell - docker 命令在 PowerShell(Windows 10 家庭版)中不起作用?
- assembly - 在程序集中划分两个有符号的 32 位 (x86-64)
- python - 使用张量流 keras 的 python 代码中没有名为“tensorflow.python.keras.engine.base_layer_v1”的模块
- wordpress - 如何制作标签分类页面?