web-dev-qa-db-ja.com

ダートで最後の深夜を取得する方法?

これはほとんどの言語でかなり一般的なタスクだと思いますが、Flutterアプリでこれを実行する方法はわかりませんでした。 Dartの最後の真夜中のDateTimeオブジェクトを取得する方法は?または潜在的に、今日/明日/昨日の特定の時間?

8
Marek Lisý

これは同じことをする必要があります

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);

Durationを加算/減算すると、うるう年と夏時間のために驚きが生じる可能性があるため、必要に応じて、絶対値の方がより安全になる場合があります。

15

[〜#〜] edit [〜#〜]:このソリューションは、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,
));

次に、Durationを減算または追加することにより、今日に関連する他の時間または日を取得できます。例:

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

DateTimeは不変であり、両方のメソッド(加算、減算)が新しいオブジェクトを返すことに注意してください。

0
Marek Lisý

このパッケージを試してください Jiffymomentjs 構文のシンプルさを使用します。下記参照

最後の真夜中を取得するには

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
0
Jama Mohamed