Flutterで日付を扱うDateTimeの使い方

2024年5月31日金曜日

Flutter

t f B! P L

DartのDateTimeクラスによる日付の扱い方

Flutterでアプリを開発する際に日付と時刻を扱うシーンは多々あります。Dartでは、DateTime クラスを使用して日付を効率的に扱うことができます。この記事では、DateTime クラスの基本的な使い方から、日付の生成、操作方法までを詳しく説明します。

DateTimeクラスの基本

DateTime クラスは、Dartのコアライブラリに含まれており、日付や時刻を表すのに使用されます。まずは、基本的な日付の生成と取得方法から見ていきましょう。

現在の日付と時刻を取得する

  DateTime now = DateTime.now();
  print(now);  // 現在の日付と時刻が出力される

DateTime.now() メソッドを呼び出すことで、現在の日付と時刻の情報を含む DateTime オブジェクトを取得できます。

特定の日付を設定する

  DateTime setDate = DateTime(2024, 5, 28);
  print(setDate);  // 2024年5月28日の日付情報が出力される

DateTime コンストラクタを使用することで、年、月、日を指定して日付を設定できます。この例では、2024年5月28日の日付が生成されます。

日付の操作

日付を効果的に扱うためには、加算や減算などの操作が頻繁に行われます。

日付の加算と減算

  DateTime today = DateTime.now();
  DateTime tenDaysLater = today.add(Duration(days: 10));
  DateTime tenDaysBefore = today.subtract(Duration(days: 10));
  print(tenDaysLater);  // 今日から10日後の日付
  print(tenDaysBefore); // 今日から10日前の日付

addsubtract メソッドを使用して、日付に日数を加えたり、減らしたりすることができます。Duration オブジェクトを使って、加算または減算する日数を指定します。

日付の比較

  DateTime startDate = DateTime(2024, 1, 1);
  DateTime endDate = DateTime(2024, 12, 31);
  bool isAfter = startDate.isAfter(endDate);
  bool isBefore = startDate.isBefore(endDate);
  bool isAtSameMomentAs = endDate.isAtSameMomentAs(startDate);
  print(isAfter);   // false
  print(isBefore);  // true
  print(isAtSameMomentAs);  // false

isAfterisBefore メソッドを使用して日付の大小関係を比較できます。isAtSameMomentAsメソッドは2つの日付が同じか判定できます。

月初の日付を取得する

月初の日付を取得するためには、DateTimeオブジェクトを使用します。月初の日付は、特定の月の1日となります。


DateTime firstDayOfMonth(DateTime date) {
  return DateTime(date.year, date.month, 1);
}

月末の日付を取得する

月末の日付を取得するためには、次の月の1日から1日を引いた日付を計算します。
DartのDateTimeでは、コンストラクタの日付に0を渡すと前日の最終日を返します。

DateTime lastDayOfMonth(DateTime date) {
  return DateTime(date.year, date.month + 1, 0);
}

DateTimeオブジェクトの日付の差を求める方法

DateTimeクラスには、2つの日付の差を計算するためのdifferenceメソッドが用意されています。このメソッドを使用することで、簡単に日付の差を計算することができます。

以下のサンプルコードでは、2つのDateTimeオブジェクトを作成し、その差を日数、時間数、分数で計算して表示しています。

var dt1 = DateTime(2024, 1, 1);
var dt2 = DateTime(2024, 1, 31);
  
print(dt2.difference(dt1).inDays);     //日数
print(dt2.difference(dt1).inHours);    //時間数
print(dt2.difference(dt1).inMinutes);  //分数

曜日を取得し、日本語の略称に変換する方法

日付だけでなく曜日も必要なシーンがあります。DartのDateTime クラスは曜日を取得し、それを日本語の略称に変換する処理を簡単に実装することが可能です。

DateTimeから曜日を取得する

DartのDateTime クラスには、曜日を表すweekday プロパティがあります。これは数値で表され、1が月曜日、7が日曜日を意味します。

DateTime today = DateTime.now();
int weekdayNumber = today.weekday;
print(weekdayNumber); // 例えば、今日が火曜日なら「2」が出力される

このweekday プロパティを使用して、現在の日付や指定した日付の曜日を取得できます。

曜日の数値を日本語の略称に変換する

曜日の数値を日本語の曜日略称(例:月、火、水)に変換するには、単純な配列を用いる方法が便利です。以下の例では、曜日の数値に基づいて適切な略称を配列から取得します。

List<String> weekdaysJP = ['日', '月', '火', '水', '木', '金', '土'];

DateTime today = DateTime.now();
String weekdayJP = weekdaysJP[today.weekday - 1];
print(weekdayJP); // 今日が火曜日なら「火」が出力される

時刻部分を切り捨てて日付部分だけを取得する

日付と時刻の両方を含むDateTimeオブジェクトを扱う場合、時刻部分が不要な場合があります。例えば、ユーザーの誕生日や特定の日付に関するデータを扱うときなど。
DateTimeオブジェクトから時刻部分を切り捨てて日付部分だけを取得するには、以下のようにします。

// 現在の日付と時刻を取得
DateTime now = DateTime.now();

// 時刻部分を切り捨てて日付部分だけを取得
DateTime dateOnly = DateTime(now.year, now.month, now.day);

まとめ

このように DateTime クラスを使うことで、Dartにおける日付の生成や操作が簡単になります。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ