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/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
推开“微前端”的门
导读:“微前端”和“微服务”类似,是这两年被频繁提及的名词。web开发从前后端放在一起的单体应用,演进成前后端分离的SPA,这些改变让前后端实现了开发解耦、独立发布。解耦让开发、调试、发布的过程都更加自由灵活,但随着业务的发展,中大型的SPA逐渐成为了“巨石应用”(Monolithic Applications),当初因为前后端分离带来的“自由”也渐行渐远,模块的拆解越来越被需要。 全文5574字,预计阅读时间14分钟 本文主要分享两方面内容: 思考什么样的系统或者前端需要微前端 简述微前端工程中需要关注的一些设计要点 本文仅会从选型和设计上做一些思考总结,「不会」重点介绍以下内容: 深入介绍某些开源框架并对比 如何设计一个非常通用的微前端框架 针对某个设计点的实现方式非常详尽的介绍 希望能给正在踌躇是否使用微前端的你一些思路。 一、什么样的系统或者前端团队需要微前端? 如果你有下面案例的困境,微前端可能是你的一个选择。假设一个SPA的前端模块,包含了ABCD四个模块,它们错综复杂地依赖了多个单独部署的后端服务,如下图: 图一 上线当天,你们可能需要梳理一个模块依赖图谱,以确定当前的上...
- 下一篇
进击的 Ansible(二):如何快速搞定生产环境 Ansible 项目布局?
Tips:与前文 《进击的 Ansible(一):Ansible 快速入门》 一样,本文使用的 Ansible 版本 2.5.4,项目演示环境 MacOS。由于 Ansible 项目开发活跃版本更新快,很多 API 接口不向后兼容,所以对照本文实践时请确保所用版本一致。 学完前文《进击的 Ansible(一):Ansible 快速入门》后,用来发布单体项目绰绰有余。但是实际生产环境中一个服务往往有多个组件,比如部署大数据服务时,常常需要部署一个“大数据全家桶”:Hadoop、 Zookeeper、 Hive、 Mysql、 Flink 等。这时仅靠前文中的知识就有点捉襟见肘了,繁多的 yaml 文件和其他配置文件依赖关系复杂,如果不能正确地划分目录组织项目结构,对于后期维护非常不利。所以今天的文章着重解决一下这个问题:如何科学正确地划分 Ansible 应用的目录结构? 把 Ansible 视为一种编程语言 首先要树立这样一个观念:“把 Ansible 视为一种编程语言”。我们可以将 Ansible 理解为专门用来管理自动化发布的 DSL,它的基本语法规则约等于 yaml 语言规则,诸...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群