dart DateTime.add从特定日期添加1小时

hwamh0ep  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(178)

我会有一个 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分

fzsnzjdm

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

sh7euo9m

sh7euo9m2#

向DateTime添加1天的建议方法如下:

DateTime other = ...;
DateTime nextDay = DateTime(other.year, other.month, other.day + 1, other.hour, other.minute)

你可以这样写一个扩展方法:

extension DateTimeExtension on DateTime {
  DateTime addDays(int days) => DateTime(year, month, day + days, hour, minute);
}

当day + days大于31时也有效。

相关问题