Last Updated on 2021-10-13 by Clay
在 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
可以看到,BTime
是 Atime
少了兩天、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
- https://riptutorial.com/dart/example/11411/basic-usage-of-datetime
- https://medium.com/flutter-community/working-with-dates-in-dart-e81c70911811
- https://api.dart.dev/stable/2.12.0/dart-core/DateTime-class.html
- https://pub.dev/packages/duration