如何在Dart获得最后一个午夜?

时间:2018-07-09 16:48:09

标签: datetime dart flutter

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

3 个答案:

答案 0 :(得分:10)

这应该做同样的事情

final now = DateTime.now();
final lastMidnight = new DateTime(now.year, now.month, now.day);

您可以使用这种方式获取当天的不同时间

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

final yesterdaySixThirty = new DateTime(now.year, now.month, now.day - 1, 6, 30);

根据需要,绝对值可以更安全,因为由于adding年和夏令时,加/减Duration可能会导致意外。

答案 1 :(得分:0)

编辑:仅当您使用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是不可变的,并且两种方法(加法,减法)都返回一个新对象。

答案 2 :(得分:0)

尝试使用此软件包Jiffy,使用momentjs语法的简单性。见下文

要获取最后一个午夜

var lastMidnight = Jiffy()
    ..subtract(days: 1)
    ..startOf("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