當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart DateTime用法及代碼示例


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 類為每個 daymonth 名稱提供一個常量 - 例如 augustfriday 。您可以使用這些常量來提高代碼的可讀性:

final berlinWallFell = DateTime.utc(1989, DateTime.november, 9);
print(DateTime.november); // 11
assert(berlinWallFell.month == DateTime.november);
assert(berlinWallFell.weekday == DateTime.thursday);

Daymonth 值從 1 開始,一周從 Monday 開始。也就是說,常數januarymonday都是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

使用方法toLocaltoUtc 獲取在其他時區中指定的等效日期/時間值。

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 的方法,例如 isAfterisBeforeisAtSameMomentAs

print(berlinWallFell.isAfter(moonLanding)); // true
print(berlinWallFell.isBefore(moonLanding)); // false
print(dDay.isAtSameMomentAs(localDay)); // true

使用帶有持續時間的DateTime

addsubtract 方法與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 天。

其他資源

  • 請參見Duration 以表示時間跨度。
  • 請參閱Stopwatch 以測量時間跨度。
  • DateTime 類不提供國際化。要國際化您的代碼,請使用intl 包。
實現的類型

Comparable<DateTime>

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 DateTime class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。