dart:core 库中DateTime 类的用法介绍如下。 一个瞬间,例如 1969 年 7 月 20 日,晚上 8:18 GMT。
DateTimes 可以表示距离纪元(1970-01-01 UTC)最多 100,000,000 天的时间值:-271821-04-20 到 275760-09-13。
DateTime通过使用其中一个构造函数或通过解析符合 ISO 8601 子集的格式正确的字符串来 创建对象。注意:小时指定在 0 到 23 之间,如 24 小时制。
final now = DateTime.now();//2023-01-31 17:04:16.953126
final berlinWallFell = DateTime.utc(2023,2,1);//2023-02-01 00:00:00.000Z
final moonLanding = DateTime.parse('2023-01-31 20:18:04Z');//2023-01-31 20:18:04.000Z
你可以使用属性来获取DateTime对象的各个单位。
print(berlinWallFell.year); // 2023
print(berlinWallFell.month); // 2
print(berlinWallFell.day); // 1
print(moonLanding.hour); // 20
print(moonLanding.minute); // 18
为了方便和可读性,DateTime 类为每个 day 和 month 名称提供一个常量 - 例如 august 和 friday 。你可以使用这些常量来提高代码的可读性:
final berlinWallFell = DateTime.utc(2023,DateTime.january,31);//2023-01-31 00:00:00.000Z
print(DateTime.january);//1
assert(berlinWallFell.month == DateTime.november);
assert(berlinWallFell.weekday == DateTime.thursday);
Day 和 month 值从 1 开始,一周从 Monday 开始。也就是说,常数january和monday都是1。 DateTime创建对象时,对象锚定在 UTC 时区或当前计算机的本地时区。
一旦创建,DateTime对象的值和时区都不能更改。
创建一个DateTime
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表示 2023 年 1 月 31 日下午 5:30 的对象
final dentistAppointment = DateTime(2023, 1, 31, 17, 30);//2023-01-31 17:30:00.000
使用 UTC 和本地时间
除非在 UTC 时区明确创建,否则 DateTime 对象位于本地时区。使用 isUtc 确定 DateTime 对象是否基于 UTC。
final dDay = DateTime.utc(2023,1,31);
print(dDay.isUtc);//true
final dDayLocal = DateTime(2023,1,31);
print(dDayLocal.isUtc);//false
使用方法toLocal 和toUtc 获取在其他时区中指定的等效日期/时间值。
final localDay = dDay.toLocal();//2023-01-31 08:00:00.000
print(localDay.isUtc);//false
final utcFromLocal = localDay.toUtc();//false
print(utcFromLocal);//2023-01-31 00:00:00.000Z
print(utcFromLocal.isUtc);//true
使用timeZoneName 获取DateTime 对象的时区缩写名称。
print(dDay.timeZoneName);//UTC
print(localDay.timeZoneName);//CST
要查找 UTC 与 DateTime 对象调用 timeZoneOffset 的时区之间的差异。
print(dDay.timeZoneOffset); // 0:00:00.000000
print(localDay.timeZoneOffset); // 8:00:00.000000
比较 DateTime 对象
DateTime 类包含按时间顺序比较 DateTime 的方法,例如 isAfter
、 isBefore
和 isAtSameMomentAs
。
print(berlinWallFell.isAfter(moonLanding)); // false
print(berlinWallFell.isBefore(moonLanding)); // true
print(dDay.isAtSameMomentAs(localDay)); // true
使用带有持续时间的DateTime
将add
和subtract
方法与Duration
对象一起使用,以基于另一个对象创建DateTime 对象。例如,要找到现在 36 小时后的时间点,可以这样写:
final later = now.add(const Duration(hours: 36));
print(later);//2023-02-02 05:40:27.955669
要找出两个 DateTime 对象之间的时间间隔,请使用 difference
,它返回一个 Duration 对象:
final moonLanding = DateTime.parse('2023-01-31 20:18:04Z');
final berlinWallFell = DateTime.utc(2023,DateTime.february,31);
final difference = berlinWallFell.difference(moonLanding);
print(difference.inDays);//30
评论(0)