dart:core
庫中DateTime
類的用法介紹如下。
一個瞬間,例如 1969 年 7 月 20 日,格林威治標準時間晚上 8:18。
DateTimes 可以表示距紀元(1970-01-01 UTC)最多 100,000,000 天的時間值:-271821-04-20 到 275760-09-13。
通過使用構造函數之一或通過解析符合 ISO 8601 子集的正確格式的字符串來創建 DateTime
對象。注意:小時指定在 0 到 23 之間,如 24 小時製。
例如:
final now = DateTime.now();
final berlinWallFell = DateTime.utc(1989, 11, 9);
final moonLanding = DateTime.parse('1969-07-20 20:18:04Z'); // 8:18pm
DateTime
對象在創建對象時錨定在 UTC 時區或當前計算機的本地時區。
一旦創建,DateTime
對象的值和時區都不能更改。
您可以使用屬性來獲取DateTime
對象的各個單位。
print(berlinWallFell.year); // 1989
print(berlinWallFell.month); // 11
print(berlinWallFell.day); // 9
print(moonLanding.hour); // 20
print(moonLanding.minute); // 18
為了方便和可讀性,DateTime
類為每個 day
和 month
名稱提供一個常量 - 例如 august 和 friday 。您可以使用這些常量來提高代碼的可讀性:
final berlinWallFell = DateTime.utc(1989, DateTime.november, 9);
print(DateTime.november); // 11
assert(berlinWallFell.month == DateTime.november);
assert(berlinWallFell.weekday == DateTime.thursday);
Day
和 month
值從 1 開始,一周從 Monday
開始。也就是說,常數january和monday都是1。
使用 UTC 和本地時間
除非在 UTC 時區明確創建,否則 DateTime
對象位於本地時區。使用 isUtc 確定 DateTime
對象是否基於 UTC。
final dDay = DateTime.utc(1944, 6, 6);
print(dDay.isUtc); // true
final dDayLocal = DateTime(1944, 6, 6);
print(dDayLocal.isUtc); // false
使用方法toLocal 和toUtc 獲取在其他時區中指定的等效日期/時間值。
final localDay = dDay.toLocal(); // e.g. 1944-06-06 02:00:00.000
print(localDay.isUtc); // false
final utcFromLocal = localDay.toUtc(); // 1944-06-06 00:00:00.000Z
print(utcFromLocal.isUtc); // true
使用timeZoneName 獲取DateTime
對象的時區縮寫名稱。
print(dDay.timeZoneName); // UTC
print(localDay.timeZoneName); // e.g. EET
要查找 UTC 與 DateTime
對象調用 timeZoneOffset 的時區之間的差異。
print(dDay.timeZoneOffset); // 0:00:00.000000
print(localDay.timeZoneOffset); // e.g. 2:00:00.000000
比較 DateTime 對象
DateTime
類包含按時間順序比較 DateTime
的方法,例如 isAfter 、 isBefore 和 isAtSameMomentAs 。
print(berlinWallFell.isAfter(moonLanding)); // true
print(berlinWallFell.isBefore(moonLanding)); // false
print(dDay.isAtSameMomentAs(localDay)); // true
使用帶有持續時間的DateTime
將add 和subtract 方法與Duration 對象一起使用,以基於另一個對象創建DateTime
對象。例如,要找到現在 36 小時後的時間點,可以這樣寫:
final now = DateTime.now();
final later = now.add(const Duration(hours: 36));
要找出兩個 DateTime
對象之間的時間間隔,請使用 difference ,它返回一個 Duration 對象:
final difference = berlinWallFell.difference(moonLanding);
print(difference.inDays); // 7416
不同時區的兩個日期之間的差異隻是兩個時間點之間的納秒數。它不考慮日曆天數。這意味著當地時間的兩個午夜之間的差異可能小於 24 小時乘以它們之間的天數,如果兩者之間有夏令時變化。如果上麵的差異是使用澳大利亞當地時間計算的,那麽差異是 7415 天和 23 小時,這隻是 inDays
報告的 7415 天。
其他資源
- 實現的類型
相關用法
- Dart DateTime.toUtc用法及代碼示例
- Dart DateTime.minute用法及代碼示例
- Dart DateTime.toIso8601String用法及代碼示例
- Dart DateTime.fromMillisecondsSinceEpoch用法及代碼示例
- Dart DateTime.add用法及代碼示例
- Dart DateTime.isAfter用法及代碼示例
- Dart DateTime.weekday用法及代碼示例
- Dart DateTime.isAtSameMomentAs用法及代碼示例
- Dart DateTime.hour用法及代碼示例
- Dart DateTime.isBefore用法及代碼示例
- Dart DateTime.utc用法及代碼示例
- Dart DateTime構造函數用法及代碼示例
- Dart DateTime.subtract用法及代碼示例
- Dart DateTime.compareTo用法及代碼示例
- Dart DateTime.now用法及代碼示例
- Dart DateTime.fromMicrosecondsSinceEpoch用法及代碼示例
- Dart DateTime.isUtc用法及代碼示例
- Dart DateTime.second用法及代碼示例
- Dart DateTime.month用法及代碼示例
- Dart DateTime.year用法及代碼示例
- Dart DateTime.millisecond用法及代碼示例
- Dart DateTime.difference用法及代碼示例
- Dart DateTime.day用法及代碼示例
- Dart DateTime.timeZoneOffset用法及代碼示例
- Dart DateTime.toLocal用法及代碼示例
注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 DateTime class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。