首页
Preview

dart:core 库中DateTime 类

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 的方法,例如 isAfterisBeforeisAtSameMomentAs

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

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
励志猿
励志每天写一篇文章,有价值的文章,提升自我!

评论(0)

添加评论