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

相关文章
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(2)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(1)
110 0
|
Dart JavaScript
带你读《深入浅出Dart》十三、Dart的命令行和Web编程(1)
带你读《深入浅出Dart》十三、Dart的命令行和Web编程(1)
|
Dart JavaScript 前端开发
带你读《深入浅出Dart》十三、Dart的命令行和Web编程(2)
带你读《深入浅出Dart》十三、Dart的命令行和Web编程(2)
|
Dart C++
带你读《深入浅出Dart》二十四、编写第一个Flutter应用
带你读《深入浅出Dart》二十四、编写第一个Flutter应用
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(3)
带你读《深入浅出Dart》三十、Flutter实战之TODO应用(3)
|
设计模式 JavaScript 前端开发
【再来亿遍 温故知新】—— 关于 JS 原型你必须要知道的二三
本瓜一向认为:学习不是一蹴而就的事情。一定是要求学习者对知识点进行反复咀嚼拿捏、不断打破重塑,长此以往,才以期达到融会贯通、为我所用的程度。所谓:温故知新,不亦乐乎?
|
存储 Dart 安全
[Flutter]足够入门的Dart语言系列之变量、基本使用和一些概念
Dart是Google发布的开源编程语言,是一种面向对象的语言。其主要应用是Flutter框架开发(Android、IOS).首先记住一点:在Dart中一切皆对象,所有的数据都是对象....
202 0
[Flutter]足够入门的Dart语言系列之变量、基本使用和一些概念
|
自然语言处理 Dart
[Flutter]足够入门的Dart语言系列之正确认识和解读Runes与Symbols类型
runes字符串的Unicode码点(integer Unicode code points),它公开了字符串的 Unicode 码位。使用字符串的runes属性可以获取该字符串对应的runes...
462 0
[Flutter]足够入门的Dart语言系列之正确认识和解读Runes与Symbols类型