Datetime 在达特最后一个午夜怎么走?

Datetime 在达特最后一个午夜怎么走?,datetime,dart,flutter,Datetime,Dart,Flutter,我想这在大多数语言中都是很常见的任务,但是我不清楚如何在我的Flutter应用程序中完成这项任务。如何在Dart中检索最后一个午夜的DateTime对象?或者可能是今天/明天/昨天的任何特定时间?编辑:仅当您使用UTC时才使用此解决方案(夏令时可能会将其搞糟),或者无论如何使用公认的答案 到目前为止,我找到的最简单的解决方案是: final now = DateTime.now(); final lastMidnight = now.subtract(Duration( hours: no

我想这在大多数语言中都是很常见的任务,但是我不清楚如何在我的Flutter应用程序中完成这项任务。如何在Dart中检索最后一个午夜的DateTime对象?或者可能是今天/明天/昨天的任何特定时间?

编辑:仅当您使用UTC时才使用此解决方案(夏令时可能会将其搞糟),或者无论如何使用公认的答案


到目前为止,我找到的最简单的解决方案是:

final now = DateTime.now();
final lastMidnight = now.subtract(Duration(
  hours: now.hour,
  minutes: now.minute,
  seconds: now.second,
  milliseconds: now.millisecond,
  microseconds: now.microsecond,
));
然后,我们可以通过减去或加上持续时间得到与今天相关的任何其他时间或日期,例如:

final tomorrowNoon = lastMidnight.add(Duration(days: 1, hours: 12));
final yesterdaySixThirty = lastMidnight
    .subtract(Duration(days: 1))
    .add(Duration(hours: 6, minutes: 30));

请注意,DateTime是不可变的,两个方法(add,subtract)都返回一个新对象。

这应该是相同的

var now = DateTime.now();
var lastMidnight = DateTime(now.year, now.month, now.day);
你可以用这种方式得到一天中的不同时间

var tomorrowNoon = DateTime(now.year, now.month, now.day + 1, 12);

var yesterdaySixThirty = DateTime(now.year, now.month, now.day - 1, 6, 30);
根据您的需要,绝对值可以更安全,因为添加/减去
持续时间
可能会因闰年和夏令时而导致惊喜。

试试这个软件包,它使用了简单的语法。见下文

最后一个午夜

var lastMidnight = Jiffy().subtract(days: 1).startOf(Units.DAY);

print(lastMidnight.dateTime); // 2019-10-20 00:00:00.000
//or you can also format it
print(lastMidnight.yMMMMEEEEdjm); // Sunday, October 20, 2019 12:00 AM

此解决方案可能无法在夏时制更改前后的午夜运行。当我们切换到夏时制时,从午夜1点开始还有14个小时。如果使用UTC日期,则此代码不起作用,因为UTC中没有夏令时。