【Dart】【Flutter】DateTime型で今月の1日・今月末日・閏日を取得する

#プログラミング#アプリ開発#Flutter#dart
日付と時間について扱うことができるDateTime型ですが、少し応用していろいろな時間を取得できるのでその例をいくつか紹介します。
DateTime型の宣言や現在時刻の取得方法等の基本的な使い方をまだ知らない方については、以下の記事を一度読んでから見ていただけると良いかと思います。
今月の1日
現在時刻を取得して、その年と月の1日を指定して取得できます。
DateTime _now = DateTime.now();
DateTime result = DateTime(_now.year, _now.month, 1);
今月末日
来月の1日を取得して、その前日と考えれば取得できます。
DateTime _now = DateTime.now();
DateTime result = DateTime(_now.year, _now.month + 1, 1).add(Duration(days: -1));
この記述だと、例えば今が2021年12月1日だったとして、来月1日を『2021年13月1日』のように指定していて問題があるように思いますが、このまま自動で『2022年1月1日』のことだと認識されます。
以上の2つを応用すれば来年の最初の日や、今年の最終日なんかも簡単に取得できます。
次回の閏日(うるうび)
まず今日が今年の2月29を過ぎているか調べ、もし過ぎていれば来年、過ぎていなければ今年から閏年(うるうどし)であるかを考えていく必要があります。
閏年の条件は、『4で割り切れる年』かつ『100で割り切れない年』かつ『400で割り切れる年』なので以下のように計算することができます。
DateTime _now = DateTime.now();
int i = (DateTime(_now.year, 2, 29).difference(_now).inDays > 0) ? 1 : 0;
while(true) {
int _currentYear = _now.year + i;
if((_currentYear % 4 == 0) && (_currentYear % 100 != 0) || (_currentYear % 400 == 0)) {
break;
}
i++;
}
DateTime result = DateTime(_now.year + i, 2, 29).add(Duration(days: -1));
※会員向けに毎週更新される動画をみてFlutterが学習できる『Flutterラボ』と、その中でマンツーマン指導のオンラインスクールを運営しています。