DateTime类
时间点,例如1969年7月20日,晚上8:18GMT。
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和本地时间
除非明确创建在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与Duration
使用与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(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})
- 使用给定的
microsecondsSinceEpoch
构造一个新的 DateTime 实例。 - DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch, {bool isUtc = false})
- 使用给定的
millisecondsSinceEpoch
构造一个新的 DateTime 实例。 - DateTime.now()
- 在本地时区中构造一个带有当前日期和时间的 DateTime 实例。
- DateTime.timestamp()
- 构造一个带有当前 UTC 日期和时间的 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 实例。
属性
- day → int
- 月份中的日
[1..31]
。无设置器 - hashCode → int
- 此对象的哈希码。无设置器覆盖
- hour → int
- 一天中的小时,以24小时制表示
[0..23]
。无设置器 - isUtc → bool
- 如果此 DateTime 设置为 UTC 时间,则为 true。final
- microsecond → int
- 微秒
[0...999]
。无设置器 - microsecondsSinceEpoch → int
- 自 "Unix纪元" 1970-01-01T00:00:00Z(UTC)以来的微秒数。无设置器
- millisecond → int
- 毫秒
[0...999]
。无设置器 - millisecondsSinceEpoch → int
- 自 "Unix纪元" 1970-01-01T00:00:00Z(UTC)以来的毫秒数。无设置器
- minute → int
- 分钟
[0...59]
。无设置器 - month → int
- 月份
[1..12]
。无设置器 - runtimeType → Type
- 对象的运行时类型的表示。无设置器继承
- second → int
- 第二个
[0...59]
。无设置器 - timeZoneName → String
- 时区名称。无设置器
- timeZoneOffset → Duration
- 时区偏移量,即本地时间和UTC之间的差异。无设置器
- weekday → int
- 星期,从 星期一 到 星期日。无设置器
- year → int
- 年份。无设置器
方法
-
add(
Duration duration) → DateTime - 返回一个新的 DateTime 实例,其中将
duration
添加到当前的 DateTime。 -
compareTo(
DateTime other) → int - 将此 DateTime 对象与
other
进行比较,如果值相等则返回零。覆盖 -
difference(
DateTime other) → Duration - 返回一个 Duration,表示从当前的 DateTime 减去
other
的差异。 -
isAfter(
DateTime other) → bool - 判断此 DateTime 是否在
other
之后。 -
isAtSameMomentAs(
DateTime other) → bool - 判断此 DateTime 是否与
other
在同一时刻。 -
isBefore(
DateTime other) → bool - 判断此 DateTime 是否在
other
之前。 -
noSuchMethod(
Invocation invocation) → dynamic - 当访问不存在的方法或属性时被调用。继承
-
subtract(
Duration duration) → DateTime - 返回一个新的 DateTime 实例,从当前的 DateTime 中减去
duration
。 -
toIso8601String(
) → String - 返回一个ISO-8601完整精度扩展格式的表示。
-
toLocal(
) → DateTime - 返回此DateTime值在本地时区。
-
toString(
) → String - 返回此实例的人类可读字符串。覆盖
-
toUtc(
) → DateTime - 返回此DateTime值在UTC时区。
运算符
-
operator ==(
Object other) → bool - 判断
other
是否是与当前时刻和时区(UTC或本地)相同的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