DateTime

时间的具体瞬间,例如1969年7月20日,晚上8:18 GMT。

DateTime可以表示距离纪元(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时间和本地时间的使用

DateTime对象在本地时间区域,除非显式创建在UTC时间区域。使用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类包含比较时间的 chronologically 的方法,如isAfterisBeforeisAtSameMomentAs

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

使用Duration与DateTime结合使用

使用一个Duration对象与addsubtract方法相结合,以基于另一个创建一个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包。
实现类型
可用的扩展

构造函数

DateTime(整数 year, [整数 month = 1, 整数 day = 1, 整数 hour = 0, 整数 minute = 0, 整数 second = 0, 整数 millisecond = 0, 整数 microsecond = 0])
在本地时区内构造一个 DateTime 实例。
DateTime.fromMicrosecondsSinceEpoch(整数 microsecondsSinceEpoch, {布尔值 isUtc = false})
使用给定的 microsecondsSinceEpoch 构造一个新的 DateTime 实例。
DateTime.fromMillisecondsSinceEpoch(整数 millisecondsSinceEpoch, {布尔值 isUtc = false})
使用给定的 millisecondsSinceEpoch 构造一个新的 DateTime 实例。
DateTime.now()
在本地时区内构造一个包含当前日期和时间的 DateTime 实例。
DateTime.timestamp()
获取当前 UTC 日期和时间的一个 DateTime
DateTime.utc(整数 year, [整数 month = 1, 整数 day = 1, 整数 hour = 0, 整数 minute = 0, 整数 second = 0, 整数 millisecond = 0, 整数 microsecond = 0])
在 UTC 时区内构造一个 DateTime 实例。

属性

day 整数
月份的日期 [1..31]
没有setter
hashCode int
此对象的哈希码。
没有setter覆盖
hour int
一天的几小时,以24小时制表示 [0..23]
没有setter
isUtc bool
如果此 DateTime 设置为UTC时间。
最终
microsecond int
微秒 [0...999]
没有setter
microsecondsSinceEpoch int
自“Unix纪元”1970-01-01T00:00:00Z since(UTC)以来的微秒数。
没有setter
millisecond int
毫秒 [0...999]
没有setter
millisecondsSinceEpoch int
自“Unix纪元”1970-01-01T00:00:00Z since(UTC)以来的毫秒数。
没有setter
minute int
分钟 [0...59]
没有setter
month int
月份 [1..12]
没有setter
runtimeType Type
对象运行时类型的表示。
没有setter继承
second int
[0...59]
没有setter
timeZoneName String
时区名称。
没有setter
timeZoneOffset Duration
时区偏移量,即本地时间和UTC之间的差异。
没有setter
weekday int
一周中的某天 星期一..星期天
没有setter
year int
年份。
没有setter

方法

add(Duration duration) DateTime
返回一个新的 DateTime 实例,将 duration 添加到 this 上。
compareTo(DateTime other) int
将此 DateTime 对象与 other 比较,如果值相等则返回零。
覆盖
difference(DateTime other) Duration
返回一个 Duration,表示从 this 减去 other 的差。
isAfter(DateTime other) bool
如果 this 发生在 other 之后,则返回 true。
isAtSameMomentAs(DateTime other) bool
如果 this 发生在与 other 相同的时刻,则返回 true。
isBefore(DateTime other) bool
如果 this 发生在 other 之前,则返回 true。
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时调用。
继承
subtract(Duration duration) DateTime
返回一个从 DateTime 减去 duration 的新实例。
toIso8601String() String
返回 ISO-8601 完整精度扩展格式的表示。
toLocal() DateTime
以本地时区返回此 DateTime 值。
toString() String
为此实例返回一个人类可读的字符串。
覆盖
toUtc() DateTime
以 UTC 时区返回此 DateTime 值。

运算符

operator ==(Object other) bool
如果 other 是同一时刻和同一时区(UTC 或本地)的 DateTime,则返回 true。
覆盖

静态方法

parse(String formattedString) DateTime
根据 formattedString 构造一个新的 DateTime 实例。
tryParse(String formattedString) DateTime?
根据 formattedString 构造一个新的 DateTime 实例。

常量

april → const int
august → const int
daysPerWeek → const int
december → const int
february → const int
friday → const int
january → const int
july → const int
june → const int
march → const int
may → const int
monday → const int
monthsPerYear → const int
november → const int
october → const int
saturday → const int
september → const int
sunday → const int
thursday → const int
tuesday → const int
wednesday → const int