我会有一个 dart 问题。
print(DateTime(2020,03,12).add(new Duration(days: 17)));
print(DateTime(2020,03,12).add(new Duration(days: 18)));
结果:
2020年3月29日00时00分
2020年3月30日01时00分
我不明白第二个结果。为什么是01:00:00?
This is the result running on Flutter test and dartpad.dev online, although if I run it from flutter application it shows 00:00:00 correctly. Why?
print(DateTime(2019,03,12).add(new Duration(days: 17)));
print(DateTime(2019,03,12).add(new Duration(days: 18)));
显示:
2019年3月29日00时00分00秒
2019年3月30日00时00分00秒
print(DateTime(2021,03,12).add(new Duration(days: 17)));
print(DateTime(2021,03,12).add(new Duration(days: 18)));
显示:
2021年3月29日01时00分
2021年3月30日01时00分
2条答案
按热度按时间fzsnzjdm1#
正确的原因是Daylight Saving Time,因为
add
方法只理解API中记录的秒,因此Duration
在使用之前被转换为秒:请注意,要添加的持续时间实际上是50 * 24 * 60 * 60秒。如果生成的DateTime具有与此不同的夏令时偏移量,则结果将不会具有与此相同的时间,甚至可能不会在50天后到达日历日期。
使用本地时间的日期时要小心。
https://api.dart.dev/stable/2.7.2/dart-core/DateTime/add.html
sh7euo9m2#
向DateTime添加1天的建议方法如下:
你可以这样写一个扩展方法:
当day + days大于31时也有效。