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

简介: 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中对时间和日期的支持。

相关文章
|
5月前
|
Dart 安全
简化代码、提高效率:Dart和Flutter开发小技巧
在日常开发中,我们常常会使用一些常用的技巧或语法糖,以简化代码、提高开发效率。本文将分享一些在Dart和Flutter中常用的小贴士,帮助你更轻松地编写优雅高效的代码。
简化代码、提高效率:Dart和Flutter开发小技巧
|
5月前
|
Android开发
flutter插件市场,字节大牛耗时八个月又一力作
flutter插件市场,字节大牛耗时八个月又一力作
|
Dart C++
带你读《深入浅出Dart》二十四、编写第一个Flutter应用
带你读《深入浅出Dart》二十四、编写第一个Flutter应用
|
存储 JavaScript 前端开发
20个JS精简代码无形装逼集合,最为致命,记得收藏好
20个JS精简代码无形装逼集合,最为致命,记得收藏好
|
缓存 搜索推荐 Java
go包管理速通,一篇文章就够了,再也不用担心因为不会导包被辞退
最近在看一些go语言相关的书,发现了一个有意思的事情:其中一本书最新印刷的版本是2017年3月,而golang包管理的后起之秀go module伴随go1.11于2018年8月诞生
990 0
go包管理速通,一篇文章就够了,再也不用担心因为不会导包被辞退
|
自然语言处理 Dart
[Flutter]足够入门的Dart语言系列之正确认识和解读Runes与Symbols类型
runes字符串的Unicode码点(integer Unicode code points),它公开了字符串的 Unicode 码位。使用字符串的runes属性可以获取该字符串对应的runes...
426 0
[Flutter]足够入门的Dart语言系列之正确认识和解读Runes与Symbols类型
|
API
Flutter 的路由2.0把我搞蒙了
Flutter 路由2.0做了较大改动,引入很多中间类来分离路由的各自职责,目的更多的是为了 Web 端的复杂路由应用。1.0版本的路由可以继续用,但2.0的扩展性会更好,不过也更复杂。
246 0
Flutter 的路由2.0把我搞蒙了
|
JavaScript 程序员 开发者
Faker.js 作者“删库跑路”引开源圈“震动”:该开源项目现已被社区控制
Faker.js 作者“删库跑路”引开源圈“震动”:该开源项目现已被社区控制
147 0
Faker.js 作者“删库跑路”引开源圈“震动”:该开源项目现已被社区控制