🕐

DartにおけるDateTime操作の基礎

2024/03/06に公開

はじめに

DateTimeとは日付と時刻を表すために使用されます。DateTimeは1970年1月1日からの経過時間をミリ秒で保持しています。

基本的な使いかた

特定の日時を作成するには以下のようにします。

// 順番に年、月、日、時、分、秒、ミリ秒を指定。
var time = DateTime(2024, 12, 10, 12, 12, 30, 600);
print(time);

今の時間を取得するには以下のようにします。

var now = DateTime.now();
print(now); // 2024-03-02 23:41:58.373

日付と時間の操作

日付や時間を進めたり、戻したりすることもできます。addメソッドとsubtractメソッドを使用します。

// 10時間進める処理
var now = DateTime.now();
var later = now.add(const Duration(hours: 10)); 
// 10時間戻す処理
var now = DateTime.now();
var before = now.subtract(const Duration(hours: 10));

特定の日付の部分を取得することもできます。

var now = DateTime.now(); 
print(now.year); // 2024
print(now.month); // 3
print(now.day); // 4
print(now.hour); // 20
print(now.minute); // 24
print(now.seconds); // 38

日付と時間の比較

日付と時間の比較もできます。

  1. compareToメソッド
    このメソッドは呼び出し側の日付が比較する日付よりも前の場合には-1、同じ場合には0、後の場合には1を返します。
void main() {
 var now = DateTime.now();
 var tomorrow = now.add(const Duration(days: 1));
 var yesterday = now.subtract(const Duration(days: 1));
  
 print(now.compareTo(tomorrow)); // -1
 print(now.compareTo(now)); // 0
 print(now.compareTo(yesterday)); // 1
}
  1. isAtSameMomentAsメソッド
    このメソッドは比較した時間が同じ値ならtrueを違う場合にはfalseを返します。
void main() {
 var now = DateTime.now();
 var tomorrow = now.add(const Duration(days: 1));
  
 print(now.isAtSameMomentAs(now));
 print(now.isAtSameMomentAs(tomorrow));
}
  1. isAfterメソッド
    このメソッドは呼び出し側の日付が比較する日付よりも後ならtrueを違う場合にはfalseを返します。
void main() {
 var now = DateTime.now();
 var tomorrow = now.add(const Duration(days: 1));
 var yesterday = now.subtract(const Duration(days: 1));
  
 print(now.isAfter(tomorrow)); // false
 print(now.isAfter(yesterday)); // true
}
  1. isBeforeメソッド
    このメソッドは呼び出し側の日付が比較する日付よりも前ならtrueを違う場合にはfalseを返します。
void main() {
 var now = DateTime.now();
 var tomorrow = now.add(const Duration(days: 1));
 var yesterday = now.subtract(const Duration(days: 1));
  
 print(now.isBefore(tomorrow)); // true
 print(now.isBefore(yesterday)); // false
}

おわりに

今回はDartでの時間操作の基礎についてまとめました。時間操作はアプリ開発ではよく使うので、しっかりと身につけていきたいと思います。最後まで読んでいただきありがとうございました。

参考文献

DateTime class

Discussion