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类为每个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与Duration

使用与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(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
覆盖

静态方法

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