flutter Dart DateTime詳解

DateTime 類

  DateTime類用來標識一個瞬時的時間節點,能夠經過構造函數,從標準格式(符合ISO 8601標準)的字符串中構造一個時間對象。DateTIme使用24小時計時法。如下是最基礎的例子:html

var now = new DateTime.now();
var berlinWallFell = new DateTime.utc(1989, 11, 9);
var moonLanding = DateTime.parse("1969-07-20 20:18:04Z");  // 8:18pm
複製代碼

DateTime對象會錨定UTC(通用協調時Universal Time Coordinated)時區或者設備的本地時區。在建立以後,DateTime的值和所屬的時區都不會改變。能夠經過對象屬性讀取具體的時間值:api

assert(berlinWallFell.month == 11); //  柏林牆倒塌的月份
assert(moonLanding.hour == 20); //  登月時的時間(小時)
複製代碼

出於便捷性和可讀性的考量,DateTIme類提供了星期和月份的常量值可供調用,你可使用不少常量來提升代碼的可讀性,示例以下:bash

var berlinWallFell = new DateTime.utc(1989, DateTime.november, 9);
assert(berlinWallFell.weekday == DateTime.thursday);
複製代碼

星期和月份的常量都是從1開始的,每週的開始從週一開始計算,因此january和monday的值都是1。函數

構造方法

DateTime(int year, [ int month = 1 int day = 1 int hour = 0 int minute = 0 int second = 0 int millisecond = 0 int microsecond = 0 ])
該方法建立一個依託於本地時區的DateTime實例
DateTime.fromMicrosecondsSinceEpoch(int microsecondsSinceEpoch, { bool isUtc: false })
該方法輸入距離1970年1月1日0時0分0秒的微秒數,獲得一個DateTime實例。
DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch, { bool isUtc: false })
該方法輸入距離1970年1月1日0時0分0秒的毫秒數,獲得一個DateTime實例。
DateTime.now()
該方法返回一個依託於本地時區的表明當前時間的DateTime實例。
DateTime.utc(int year, [ int month = 1 int day = 1 int hour = 0 int minute = 0 int second = 0 int millisecond = 0 int microsecond = 0 ])
該方法返回一個依託於UTC的DateTime實例ui

實例方法

add(Duration duration) → DateTime
加上傳入的Duration實例所表示的時間間隔,返回一個新的DateTime實例,新實例與調用實例之間的時間差爲durationspa

var now = DateTime.now();
  var span = Duration(days: 1);
  print(now);
  print(now.add(span));
複製代碼

輸出:
2019-12-15 09:29:59.605510
2019-12-16 09:29:59.605510pwa

compareTo(DateTime other) → int
比較兩個DateTime實例,若是兩者相等,則返回0
difference(DateTime other) → Duration
返回當前實例與傳入實例之間的時間差,返回一個Duration實例
isAfter(DateTime other) → bool
同傳入的DateTime進行比較,若是標識的時間在傳入實例以後,則返回true
isAtSameMomentAs(DateTime other) → bool
同傳入的DateTime進行比較,若是兩者表示的時間在同一時刻,則返回true
isBefore(DateTime other) → bool
同傳入的DateTime進行比較,若是標識的時間在傳入實例以前,則返回true
subtract(Duration duration) → DateTime
減去傳入的Duration實例所表示的時間間隔,返回一個新的DateTime實例,新實例與調用實例之間的時間差爲duration翻譯

var now = DateTime.now();
  var span = Duration(days: 1);
  print(now);
  print(now.subtract(span));
複製代碼

輸出:
2019-12-15 09:32:02.811829
2019-12-14 09:32:02.811829code

toIso8601String() → String
返回依照IOS-8601標準的全精度表示的時間格式
toLocal() → DateTime
返回該實例在本地時區下表示的實例
toString() → String
返回該實例的字符串表現
toUtc() → DateTime
返回該實例在UTC時間表示下的實例orm

操做符

operator ==(dynamic other) → bool
只有當傳入值爲DateTime實例而且表示的時間相同且在同一時區下時返回true

靜態方法

parse(String formattedString) → DateTime
經過標準格式的字符串來構造一個DateTime實例

var now = DateTime.parse('2019-12-12');
  print(now);
複製代碼

輸出:
2019-12-12 00:00:00.000

tryParse(String formattedString) → DateTime
經過標準格式的字符串來構造一個DateTime實例

實例屬性

day → int
返回實例的日期,從取值範圍從1到30
hashCode → int
返回實例對象的hash碼
hour → int
返回在24小時計時法中的小時時間,取值範圍從0到23
isUtc → bool
返回當前實例是不是UTC計時
microsecond
返回實例表示的時間距離1970年1月1日0時0分0秒的微秒數的最後三位數,取值範圍0到999
microsecondsSinceEpoch → int
返回實例表示的時間距離1970年1月1日0時0分0秒的微秒數
millisecond → int
返回實例表示的時間距離1970年1月1日0時0分0秒的毫秒數的最後三位數,取值範圍0到999
millisecondsSinceEpoch → int
返回實例表示的時間距離1970年1月1日0時0分0秒的毫秒數
minute → int
返回實例表示時間的分鐘數,取值範圍從0到59
month → int
返回實例表示時間的月份,取值範圍從1到12 second → int
返回實例表示時間的月份,取值範圍從0到59
timeZoneName → String
返回實例的時區名 timeZoneOffset → Duration
返回當前時區與UTC時間之間的時間間隔,用Duration對象來表示
weekday → int
返回實例表示時間是星期幾,取值範圍從1到7 year → int 返回實例表示時間的年份

使用UTC時區和本地時區

DateTime實例默認使用本地時區,除非在建立時顯示聲明使用UTC時區。

var dDay = new DateTime.utc(1944, 6, 6);
複製代碼

可使用isUtc來肯定當前的時間是不是UTC時區。可使用toLocaltoUtc來進行時區間的轉換,使用timeZoneName來獲取DateTime實例所屬時區的簡寫,使用timeZoneOffset來獲取不一樣時區之間的時間差值。

DateTime實例之間的比較

DateTime類有幾個簡單的方法來實現DateTime實例之間的比較,好比isAfterisBeforeisAtSameMomentAs:

assert(berlinWallFell.isAfter(moonLanding) == true);
assert(berlinWallFell.isBefore(moonLanding) == false);
複製代碼

DateTime與Duration類的配合使用

能夠經過addsubtract方法加減一個Duration對象來對DateTime實例進行操做,並返回一個新的實例。例如,計算六天後的今天的時間:

var now = new DateTime.now();
var sixtyDaysFromNow = now.add(new Duration(days: 60));
複製代碼

爲了找出兩個DateTime實例之間的差值,咱們可使用difference方法,它將返回一個Duration實例:

var difference = berlinWallFell.difference(moonLanding);
assert(difference.inDays == 7416);
複製代碼

兩個不一樣時區之間的時間差就是按照兩地之間的時間納秒差,這個結果並不會補償日曆日或時制之間的差異。這就意味着若是相鄰兩個午夜時間跨過了夏令時的變動日期,那麼這兩個午夜之間的時間差可能不滿24個小時。上述代碼中的時間差若是用澳大利亞本地時間計算,那麼結果將爲7415天又23小時,按照成天來計算只有7415天。

其餘資源

關於時間區間(span of time)的表示方法,詳見Duration,關於時間間隔的表示方法,詳見Stopwatch,DateTime類並無提供國際化的相關功能。爲了進行國際化,可使用intl包。

常量

april → const int
4
august → const int
8
daysPerWeek → const int
7
december → const int
12
february → const int
2
friday → const int
5
january → const int
1
july → const int
7
june → const int
6
march → const int
3
may → const int
5
monday → const int
1
monthsPerYear → const int
12
november → const int
11
october → const int
10
saturday → const int
6
september → const int
9
sunday → const int
7
thursday → const int
4
tuesday → const int
2
wednesday → const int
3

純手工翻譯,感謝支持!

參考文獻

英文文檔地址

相關文章
相關標籤/搜索