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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。