gpt4 book ai didi

flutter - Dart/Flutter DateTime difference inDays error for March 31 April 1

转载 作者:IT王子 更新时间:2023-10-29 06:48:45 25 4
gpt4 key购买 nike

我试图从 DatePicker 中获取两个日期之间的天数差。除了 ONE single date : March 31 外,这工作正常。

当其中一个日期是 3 月 31 日时,两个 DateTimes 之间的天数相差 1 天。我知道这是由于节光而造成的,而 3 月是 30.9…天长而不是 31,因此我猜,错误。但是除了手动检查日期是否等于 3 月 31 日并在结果中加上一天之外,有谁知道如何解决这个问题吗?

可以在 Dart Pad 中运行的两个非常简单的示例:

DateTime aprilFirst = DateTime(2019, 3, 30);
DateTime marchThirtyFirst = DateTime(2019, 3, 31);

print(aprilFirst.difference(marchThirtyFirst).inDays); => -1

DateTime marchThirty = DateTime(2019, 4, 1);
DateTime marchThirtyFirst = DateTime(2019, 3, 31);

print(marchThirty.difference(marchThirtyFirst).inDays); => 0

更新:

DateTime aprilFirst = DateTime(2019, 4, 1);
print(aprilFirst.add(Duration(days: -1))); => 2019-03-30 23:00:00.000

这应该打印 2019-03-31 23:00:00.000 !

我尝试了 Günter Zöchbauer 的制作 DateTimes UTC 的解决方案,但结果完全相同:

DateTime aprilFirst = DateTime(2019, 4, 1).toUtc();
DateTime marchThirty = DateTime(2019, 3, 30).toUtc();
DateTime marchThirtyFirst = DateTime(2019, 3, 31).toUtc();

print(aprilFirst.difference(marchThirtyFirst).inHours); => 23
print(aprilFirst.difference(marchThirtyFirst).inDays); => 0
print(marchThirty.difference(marchThirtyFirst).inHours); => -24
print(aprilFirst.add(Duration(days: -1))); => 019-03-30 22:00:00.000Z

最佳答案

@Günter Zöchbauer 让我走上了正确的道路。 DateTime(...).toUTC() 将因差异计算而失败。但是,使用 DateTime.utc(...) 构造函数就可以了!

DateTime aprilFirst = DateTime.utc(2019, 4, 1);
DateTime marchThirty = DateTime.utc(2019, 3, 30);
DateTime marchThirtyFirst = DateTime.utc(2019, 3, 31);

print(aprilFirst.difference(marchThirtyFirst).inHours); => 24
print(aprilFirst.difference(marchThirtyFirst).inDays); => 1
print(marchThirty.difference(marchThirtyFirst).inHours); => -24
print(aprilFirst.add(Duration(days: -1))); => 2019-03-31 00:00:00.000Z

关于flutter - Dart/Flutter DateTime difference inDays error for March 31 April 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55472959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com