広告

Flutterラボの

プレミアム会員になる

【Dart】【Flutter】DateTime型についてのまとめ

2020.10.01

時間に関するDateTime型は、Flutterでのアプリ開発には欠かせないものなので、宣言、よく使うメソッド、パッケージを使った応用についてまとめます。

Flutterラボ - 「Flutterラボ」では動画でFlutter・Dart・Firebaseに関するアプリ制作の技術を学ぶことができます。プログラミング初心者から経験者まで誰でも気軽にFlutterが学べるコンテンツを公開しています。 「Flutterラボ」では動画でFlutter・Dart・Firebaseに関するアプリ制作の技術を学ぶことができます。プ flutterlabo.tech



型宣言

DateTime a;

DateTimeは 年、月、日、時間、分、秒、ミリ秒、マイクロ秒 までの指定することが可能になっています。

今回は、2020年10月2日12時10分を指定します。

DateTime a = DateTime(2020, 10, 2, 12, 10);

now (DateTime)

いまのDateTime情報を取得するメソッドです。

DateTime now = DateTime.now();

year・month・day・hour・minute・millisecond・microsecond (int)

DateTimeの年や月などの情報をそれぞれ取得できるメソッドです。

DateTime a = DateTime(2020, 10, 2, 12, 0);
print(a.year); // 2020

同じように、month や day 等で 月や日の情報を int で取得することができます。

weekday (int)

曜日を確認することができるメソッドです。
1が月曜日、7が日曜日です。

DateTime a = DateTime(2020, 10, 2, 12, 0);
print(a.weekday); // 5(金曜日)

add (DateTime)

時間を指定した期間後、もしくは期間前に変化させるメソッドです。

DateTime a = DateTime(2020, 10, 2);

print(a.add(Duration(days: 1))); // 10/3
print(a.add(Duration(days: -1))); // 10/1

これらを応用すると、今月が何日まであるか確認したりすることができます。

DateTime now = DateTime.now();
print(DateTime(now.year, now.month + 1, 1).add(Duration(days: -1)).day); // 2020年10月は'31日'まである

簡単に解説すると、
・今の情報を取得
・来月の1日が何月何日かわかる
・その日の1日前の情報を取得
・その日の day は今月の最終日
といった流れです。

difference (Duration)

2つのDateTimeの期間の差を取得するメソッドです。

DateTime a = DateTime(2020, 10, 3, 0, 0);
DateTime b = DateTime(2020, 10, 3, 12, 0);
print(a.difference(b).inHours); // -12

b から見て a はどのくらい期間の差があるか、未来の場合はプラス、過去の場合はマイナスで取得されます。
今回の場合は、b から見て a は12時間前の過去なのでその inHours をとると -12 となります。

DateTime型からString型に変換する

pubspec.yaml を編集して、『intl』パッケージを取得します。

dependencies:
 flutter:
   sdk: flutter

 cupertino_icons: ^0.1.3
 intl: ^0.16.1 #この行を追加

DateTime型のままでは、アプリ内に表示ができないので、『****年**月**日』の形に変換します。

DateTime a = DateTime(2020, 10, 2, 0, 0);
print(DateFormat('yyyy年M月d日').format(a)); // 2020年10月2日


Flutterラボ
hatchoutschool
FlutterとNuxtに関する知識を発信しています! 動画で学べる学習サイト『Flutterラボ』と『Nuxtラボ』を運営 Flutterラボ:https://flutterlabo.tech/ 広告のECサイトを開発(https://ec-ad.tech/)