简介

时间和日期是我们经常会在程序中使用到的对象。但是对时间和日期的处理因为有不同时区的原因,所以一直以来都不是很好用。就像在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/

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

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

dart系列之:时间你慢点走,我要在dart中抓住你的更多相关文章

  1. DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension)

    跟大家的交流是我的动力. :) DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate Date Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★ ...

  2. DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension)

    DAX/PowerBI系列 - 关于时间系列 - 如何用脚本生成时间维度 (Generate TIME Dimension) 难度: ★☆☆☆☆(1星) 适用范围: ★★★★★(5星) 这个时间系列想 ...

  3. DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数

    DAX/PowerBI系列 - 关于时间系列 - 时间相关数值比较 - 用非自带函数 文末有彩蛋,解决蛋疼问题 难度: ★★☆☆☆(2星) 适用范围: ★★★☆☆(3星) 概况: 基于时间的汇总可能是 ...

  4. ElasticSearch 2 (31) - 信息聚合系列之时间处理

    ElasticSearch 2 (31) - 信息聚合系列之时间处理 摘要 如果说搜索是 Elasticsearch 里最受欢迎的功能,那么按时间创建直方图一定排在第二位.为什么需要使用时间直方图? ...

  5. js笔记系列之--时间及时间戳

    js入门系列之 时间及时间戳 时间及时间戳 时间及时间戳是js里面很常见的一个概念,在我们写前端页面的时候,经常会遇到需要获取当前时间的情况,所以,了解js中的时间概念非常重要.而时间戳是指格林威治时 ...

  6. dart系列之:dart语言中的特殊操作符

    dart系列之:dart语言中的特殊操作符 目录 简介 普通操作符 类型测试操作符 条件运算符 级联符号 类中的自定义操作符 总结 简介 有运算就有操作符,dart中除了普通的算术运算的操作符之外,还 ...

  7. dart系列之:在dart中使用packages

    目录 简介 pubspec.yaml get packages 使用packages 升级依赖 总结 简介 java中使用jar包来封装有用的功能,然后将其分发到maven仓库中,供其他人使用.同样的 ...

  8. dart系列之:元世界pubspec.yaml文件详解

    目录 简介 pubspec.yaml支持的字段 一个例子 字段详情 总结 简介 pubspec.yaml是所有dart项目的灵魂,它包含了所有dart项目的依赖信息和其他元信息,所以pubspec.y ...

  9. dart系列之:数学什么的就是小意思,看我dart如何玩转它

    目录 简介 dart:math包的构成 math Random 总结 简介 dart也可以进行数学运算,dart为数学爱好者专门创建了一个dart:math包来处理数学方面的各种操作.dart:mat ...

随机推荐

  1. 剑指offer:JZ9 用两个栈实现队列

    JZ9 用两个栈实现队列 描述 用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能. 队列中的元素为int类型.保证操作合法,即保 ...

  2. [对对子队]会议记录5.25(Scrum Meeting11)

    今天已完成的工作 吴桐雨 ​ 工作内容:设计第10.11关 ​ 相关issue:设计额外关卡 ​ 相关签入:level10 level11 吴昭邦 ​ 工作内容:写测试代码 ​ 相关issue:测试初 ...

  3. 大闸蟹的项目分析——CSDN APP

    大闸蟹的软件案例分析 项目 内容 这个作业属于那个课程 班级博客 这个作业的要求在哪里 作业要求 我在这个课程的目标是 学习软件工程的相关知识 这个作业在哪个具体方面帮我实现目标 从多角度分析软件 一 ...

  4. Prometheus基于Eureka的服务发现

    Prometheus基于Eureka的服务发现 一.背景 二.实现步骤 1.eureka 客户端注册到prometheus中 2.prometheus中的写法 3.实现效果 三.完整代码 四.参考链接 ...

  5. elasticsearch的dsl查询

    测试es的dsl查询,准备数据,在插入数据的时候,如果index.type.mapping都没有,es会自动创建 一.数据的准备 curl -XPOST "http://192.168.99 ...

  6. 期望 概率DP

    期望 \(x\) 的期望 \(E(x)\) 表示平均情况下 \(x\) 的值. 令 \(C\) 表示常数, \(X\) 和 \(Y\) 表示两个随机变量. \(E(C)=C\) \(E(C \time ...

  7. Register Abstraction(9)

    This post will explain how to use the UVM Register Abstraction Layer (RAL) to generate register tran ...

  8. vsftpd 编译安装 及 隐藏版本号

    环境:Redhat Enterprise Linux AS 4.0 update2(i386) 不提示,均表示以root权限执行. [注:]//为注释符,如"// 建立MySQL组" ...

  9. node 读取文件内容并响应

    node 读取文件内容并响应 const http = require('http'); const fs = require('fs') //创建 Server const server = htt ...

  10. go条件语句

    1. if else package main import "fmt" func main(){ a :=123 if a>100{ fmt.prinln("大于 ...