Skip to content

[Flutter] Dart 語言中的 DateTime 使用筆記

在 Dart 語言中,若是有處理時間、日期等相關的需求,可以通過 DateTime 類別物件的操作來完成。

DateTime 類別是一種紀錄時間節點的物件,可以構造當前時間或任意時間、比較時間的先後、或是時間的增加及減少

以下簡單紀錄 DateTime 類別的一些簡單操作。


建立 DateTime 物件

使用 DateTime.now() 建立當前時間

void main() {
  var now = DateTime.now();
  print(now);
}


Output:

2021-03-04 13:50:46.137


使用 DateTime.utc() 建立指定時間

DateTime.utc() 可以建立當前裝置的本地時間。

void main() {
  var datetime = DateTime.utc(2020, 12, 22, 23, 22);
  print(datetime);
}


Output:

2020-12-22 23:22:00.000Z



DateTime 物件的加減

  • subtract(Duration duration): 減去 Duration 物件所設定的時間
  • add(Duration duration): 增加 Duration 物件所設定的時間
  • difference(DateTime other): 返回 Duration 物件的時間差

而 DateTime 和 Duration 的差別是什麼?簡單來講,DateTime 物件是一個『時間點』、而 Duration 則是『一段時間』。我們可以透過 Duration 物件去改變 DateTime 物件的時間。

那麼,現在來看段 Datetime 物件修改時間的程式:

void main() {
  // ATime
  var ATime = DateTime.utc(2020, 12, 22, 23, 22);
 
  // subtract() => BTime
  var BTime = ATime.subtract(Duration(days: 2));
  
  // add() => CTime
  var CTime = BTime.add(Duration(days: 2));
  
  // Print
  print("ATime: ${ATime}");
  print("BTime: ${BTime}");
  print("CTime: ${CTime}");
}


Output:

ATime: 2020-12-22 23:22:00.000Z
BTime: 2020-12-20 23:22:00.000Z
CTime: 2020-12-22 23:22:00.000Z


可以看到,BTimeAtime 少了兩天、CTime 則是 BTime 又多了兩天。

除了 days 之外,Duration 所能設定的時間單位還有以下其他種類:

  • days
  • hours
  • minutes
  • seconds
  • milliseconds
  • microsecond

不同 DateTime 物件的比較

若是要比較不同時間點哪個『比較早』或哪個『比較晚』,可以使用以下函式來完成:

  • isAtSameMomentAs(DateTime other): 比較兩個時間點是否相等,返回 bool 值
  • isAfter(DateTime other): 比較原時間點是否比輸入時間點早,返回 bool 值
  • isBefore(DateTime other): 比叫原時間點是否比輸入時間點晚,返回 bool 值
void main() {
  // ATime
  var ATime = DateTime.utc(2020, 12, 22, 23, 22);
 
  // subtract() => BTime
  var BTime = ATime.subtract(Duration(days: 2));
  
  // add() => CTime
  var CTime = BTime.add(Duration(days: 2));
  
  // Print
  print("ATime is before BTime: ${ATime.isBefore(BTime)}");
  print("ATime is after BTime: ${ATime.isAfter(BTime)}");
  print("ATime is equal to CTime: ${ATime.isAtSameMomentAs(CTime)}");


Output:

ATime is before BTime: false
ATime is after BTime: true
ATime is equal to CTime: true

References


Read More

Leave a Reply