当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart DateTime用法及代码示例


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 类为每个 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 和本地时间

除非在 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

使用方法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 类包含按时间顺序比较 DateTime 的方法,例如 isAfterisBeforeisAtSameMomentAs

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

使用带有持续时间的DateTime

addsubtract 方法与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 天。

其他资源

  • 请参见Duration 以表示时间跨度。
  • 请参阅Stopwatch 以测量时间跨度。
  • DateTime 类不提供国际化。要国际化您的代码,请使用intl 包。
实现的类型

Comparable<DateTime>

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 DateTime class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。