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
类为每个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时间和本地时间的使用
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
使用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
类包含比较时间的 chronologically 的方法,如isAfter、isBefore和isAtSameMomentAs。
print(berlinWallFell.isAfter(moonLanding)); // true
print(berlinWallFell.isBefore(moonLanding)); // false
print(dDay.isAtSameMomentAs(localDay)); // true
使用Duration与DateTime结合使用
使用一个Duration对象与add
和subtract
方法相结合,以基于另一个创建一个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整天。
其他资源
- 实现类型
- 可用的扩展
构造函数
- 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。覆盖
静态方法
常量
- 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