写点什么

dart 系列之: 时间你慢点走, 我要在 dart 中抓住你

作者:程序那些事
  • 2021 年 11 月 29 日
  • 本文字数:1292 字

    阅读完需:约 4 分钟

dart系列之:时间你慢点走,我要在dart中抓住你

简介

时间和日期是我们经常会在程序中使用到的对象。但是对时间和日期的处理因为有不同时区的原因,所以一直以来都不是很好用。就像在 java 中,为时间和日期修改和新增了多次 API,那么作为新生的语言 dart 而言,会有什么不一样的地方吗?

dart 中关于日期和时间的两个非常重要的类是 DateTime 和 Duration.

其中 DateTime 表示的是时间,而 Duration 表示的是时间差。

DateTime

先看一下 DateTime 的使用。

DateTime 表示的是一个时间点。因为世界时钟有 UTC 和本地时间两种。所以,在使用 DataTime 的时候,也可以使用这两种时钟。

最简单的就是获取当前的时间:

var now = DateTime.now();
复制代码

如果要创建指定日期的时间,则可以将年月日传入 DateTime 的构造函数:

var now = DateTime(2021, 11, 20); 
复制代码

注意,上面创建的日期是本地日期。

如果要创建 UTC time,则可以使用 DateTime.utc 方法:

var utc = DateTime.utc(2021, 11, 20);
复制代码

还有一种表示时间的方法是 unix time, Unix time 指的是从 1970 年 1 月 1 日开始所经过的秒数.

DateTime 有两种表示 Unix time 时间的方法,分别是:

  DateTime.fromMicrosecondsSinceEpoch(10000);  DateTime.fromMillisecondsSinceEpoch(10000);
复制代码

他们的区别在于,一个表示的是微秒,一个表示的是毫秒。

DateTime 还可以将字符串转换成为 DateTime 对象:

var time= DateTime.parse('2002-02-27T14:00:00-0500');
复制代码

事实上,DateTime.parse 可以接受多种字符类型,如下所示:

 `"2012-02-27"``"2012-02-27 13:27:00"` `"2012-02-27 13:27:00.123456789z"``"2012-02-27 13:27:00,123456789z"``"20120227 13:27:00"``"20120227T132700"``"20120227"``"+20120227"` `"2012-02-27T14Z"``"2012-02-27T14+00:00"`
复制代码

Duration

Duration 表示的是两个时间之间的差值。

来看下 Duration 的构造函数:

  const Duration(      {int days = 0,      int hours = 0,      int minutes = 0,      int seconds = 0,      int milliseconds = 0,      int microseconds = 0})      : this._microseconds(microsecondsPerDay * days +            microsecondsPerHour * hours +            microsecondsPerMinute * minutes +            microsecondsPerSecond * seconds +            microsecondsPerMillisecond * milliseconds +            microseconds);
复制代码

可以看到 Duration 可以表示从天到 microseconds 的间隔,已经足够用了. 应该怎么使用呢?

var time = DateTime.now();
// 添加一年var nextYear = time.add(const Duration(days: 365));assert(nextYear.year == 2022);
复制代码

同样的,我们可以对还可以减去 Duration:

var time = DateTime.now();
//减少一年var lastYear = time.subtract(const Duration(days: 365));assert(lastYear.year == 2020);
复制代码

当然还可以计算两个日期的差值:

var duration = nextYear.difference(time);assert(duration.inDays == 365);
复制代码

总结

以上就是 dart 中对时间和日期的支持。

本文已收录于 http://www.flydean.com/17-dart-date-time/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 1 小时前阅读数: 9
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
dart系列之:时间你慢点走,我要在dart中抓住你