🐷

Flutter/Dart DateTimeチートシート

2021/06/22に公開
3

DateTimeチートシート

DateTime型の便利なプロパティやメソッドをまとめました。

1. はじめに

開発環境は、下記のとおりです。

カテゴリ Ver.
Flutter 2.2.0
Dart 2.13.0

2. チートシート

よく使いそうなプロパティやメソッドをご紹介します。

カテゴリ プロパティ/メソッド名
現在の日時を取得する now
指定日時を取得する DateTime
年、月、日、曜日、時、分を取得する year / month / day / weekdayなど
未来日時を取得する add
過去日時を取得する subtract
日付比較(未来日時か?) isAfter
日付比較(過去日時か?) isBefore
日付比較(同日か?) isAtSameMomentAs
日付の差分を取得する difference
【番外】日付フォーマット DateFormat(intl)

3.使い方

3.1. 現在の日時を取得する (now)

    var now = DateTime.now();
    print(now); // 2021-06-22 12:15:36.030889

3.2. 指定日時を取得する (DateTime)

    var now = DateTime(2021, 10, 10, 12, 12);
    print(now); //2021-10-10 12:12:00.000

3.3. 年、月、日、曜日、時、分を取得する (year / month / day / weekdayなど)

    var now = DateTime.now();
    print(
        '${now.year}/${now.month}/${now.day}(${now.weekday})  ${now.hour}:${now.minute}'); //2021/6/22(2)  12:20

3.4. 未来日時を取得する(add)

    var now = DateTime.now();
    var addDateTime = now.add(Duration(days: 1));
    print('$now -> $addDateTime'); //2021-06-22 12:23:10.898158 -> 2021-06-23 12:23:10.898158

3.5. 過去日時を取得する (subtract)

    var now = DateTime.now();
    var subDateTime = now.subtract(Duration(days: 1));
    print('$now -> $subDateTime');

3.6. 日付比較(未来日時か?) (isAfter)

    var dateTime1 = DateTime(2021, 10, 10);
    var dateTime2 = DateTime(2021, 12, 10);
    print(dateTime1.isAfter(dateTime2)); // false

3.7. 日付比較(過去日時か?) (isBefore)

    var dateTime1 = DateTime(2021, 10, 10);
    var dateTime2 = DateTime(2021, 12, 10);
    print(dateTime1.isBefore(dateTime2)); // true    

3.8. 日付比較(同日か?)(isAtSameMomentAs)

    var str = 'Flutter Dart String';
    var str2 = 'Dart String';

    print(dateTime1.isAtSameMomentAs(dateTime1)); //true
    print(dateTime1.isAtSameMomentAs(dateTime2)); //false

3.9. 日付の差分を取得する(difference)

    var dateTime1 = DateTime(2021, 10, 10, 10, 10);
    var dateTime2 = DateTime(2021, 12, 12, 12, 12);

    print(dateTime2.difference(dateTime1)); //1514:02:00.000000
    print(dateTime2.difference(dateTime1).inDays); //63
    print(dateTime2.difference(dateTime1).inHours); //1514
    print(dateTime2.difference(dateTime1).inSeconds); //5450520

3.10. 【番外】日付フォーマット(DateFormat)

日付のフォーマットには、intlパッケージを利用する必要があるようです。
下記のパッケージをpubspec.yamlに設定しておきます。

https://pub.dev/packages/intl/install

import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';


    await initializeDateFormatting('ja_JP');

    var now = DateTime.now();
    print(DateFormat('yyyy-MM-dd(E) hh:mm').format(now)); // 2021-06-22(Tue) 11:59
    print(DateFormat.yMMMMEEEEd('ja').format(now)); //2021年6月22日火曜日

3.11. おまけ

曜日や月の定数も用意されているようです。

    //曜日の定数
    var weekDays = [
      DateTime.monday,
      DateTime.tuesday,
      DateTime.wednesday,
      DateTime.thursday,
      DateTime.friday,
      DateTime.saturday,
      DateTime.sunday,
    ];

    print(DateTime.now().weekday); //2
    print(weekDays); //[1, 2, 3, 4, 5, 6, 7]

4. 公式ドキュメント

もっと知りたい方は、Dartで用意されているプロパティやメソッドは、公式サイトに纏められています。
是非御覧ください。

https://api.dart.dev/stable/2.10.5/dart-core/DateTime-class.html

Discussion

miyaken12miyaken12

素敵なチートシートありがとうございます!

isBeforeのコード例の代わりにsubtractになっており、3.7と3.8のタイトルとは別のコード例になってますね🙇‍♀️

たじたじ

@miyaken12
コメントありがとうございます。
修正しました。

takutaku

3.3での曜日の取得について、そこから数字を取り出して〇曜日という風に表示させることは可能でしょうか?