Dart 非常详细日期的操作方法
近期在研究 Dart
源码, 把关于 Date
这一块写个文章进行整理分享。
在 Dart
中操作日期通过 DateTime
类来实现。
由于 DateTime
是 Dart
内置的,所以不需要导入。
解析
- DateTime
- DateTime.parse
- DateTime.tryParse
- DateTime.utc
解析一个日期可以通过 DateTime.parse
静态方法
一个典型的例子:
String str = '2020-02-20 22:48:18';
DateTime date = DateTime.parse(str);
print(date); // 2020-02-20 22:48:18.000
parse
参数接收一个字符串, 能够被解析的有以下格式:
/**
* "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"
* "-123450101 00:00:00 Z"
* "2002-02-27T14:00:00-0500"
*/
parse
方法还有一个对应的 tryParse
的静态方法, 实际上就是 parse
的语法糖
tryParse` 如果接收的参数无法被解析那么不会抛出异常,而是返回 `null
tryParse
的内部实现原理:
try {
return parse(formattedString);
} on FormatException {
return null;
}
还可以通过 DateTime
实例进行解析, 可以接收8个参数,第一个是年份必填,剩余的是选填,如下:
/**
* DateTime(int year,
* [int month = 1,
* int day = 1,
* int hour = 0,
* int minute = 0,
* int second = 0,
* int millisecond = 0,
* int microsecond = 0])
*/
DateTime date = DateTime(2020);
// 2020年2月22日 22小时22分22秒
DateTime date2 = DateTime(2020, 2, 22, 22, 22, 22);
如果想解析成 utc
, 可以调用它的静态方法,参数和 DateTime
一致
DateTime date1 = DateTime.utc(2020, 2, 22, 22, 22, 22);
取值
取得当前时间
DateTime n = DateTime.now();
print(n); // 2020-02-20 23:05:04.332418
取得一个以毫秒时间戳
int t = DateTime.now().millisecondsSinceEpoch;
print(t); // 1582211214849
取得一个以微秒时间戳
int t = DateTime.now().microsecondsSinceEpoch;
print(t); // 1582211566844552
取得当前时区
String timeZone = DateTime.now().timeZoneName;
print(timeZone);
取得一周的星期几
int w = DateTime.now().weekday;
print(w); // 4
取得当前时区的偏移时差 (北京时区是东八区,领先UTC八个小时)
Duration offset = DateTime.now().timeZoneOffset;
print(offset); // 8:00:00.000000
取得当前年份
int year = DateTime.now().year;
print(year); // 2020
取得当前月份 (1-12), 这跟JS里有点不同
int month = DateTime.now().month;
print(month); // 2
取得当前月份的第几天 (1-31)
int day = DateTime.now().day;
print(day); // 21
取得当前小时 (0-23)
int hour = DateTime.now().hour;
print(hour); // 8
取得当前分钟 (0-59)
int minute = DateTime.now().minute;
print(minute); // 18
取得当前秒 (0-59)
int second = DateTime.now().second;
print(second); // 18
取得当前毫秒 (0-999)
int millisecond = DateTime.now().millisecond;
print(millisecond); // 249
取得当前微秒 (0-999)
int microsecond = DateTime.now().microsecond;
print(microsecond); // 249
显示
- toString
- toIso8601String
- toLocal
- toUtc
toString
要把一个 DateTime
转换成时间可以使用 toString
方法
String str = DateTime.now().toString();
print(str); // 2020-02-22 01:01:01.182096
toIso8601String
转换成 ISO 8601
String str = DateTime.now().toIso8601String();
print(str); // 2020-02-22T22:12:30.159729
toLocal
DateTime date = DateTime.now().toLocal();
print(date); // 2020-02-22 22:27:57.641258
toUtc
DateTime date = DateTime.now().toUtc();
print(date); // 2020-02-22 03:27:09.564188Z
操作
- add() 通过增加时间来改变原始的 DateTime
- subtract() 通过减去时间来改变原始的 DateTime
add()
参数接收的是 Duration
类型, 下面例子由原来的 0小时
新增了 1小时
Duration oneHours = Duration(hours: 1);
String date = DateTime(2020).add(oneHours).toString();
print(date); // 2020-01-01 01:00:00.000
subtract()
是 add()
反向操作, 用法跟 add
一致,不再阐述。
查询
- isBefore
- isAfter
- isAtSameMomentAs
- compareTo
isBefore 检查一个 DateTime
是否在另一个 DateTime
之前
DateTime date1 = DateTime(2020);
DateTime date2 = DateTime(2019);
print(date1.isBefore(date2)); // false
isAfter 检查一个 DateTime
是否在另一个 DateTime
之后
DateTime date1 = DateTime(2020);
DateTime date2 = DateTime(2019);
print(date1.isAfter(date2)); // true
isAtSameMomentAs 如果此事件与other同时发生,则返回true.
DateTime date1 = DateTime(2020);
DateTime date2 = DateTime(2019);
print(date1.isAtSameMomentAs(date2)); // false
compareTo 判断2个 DateTime
是否相等,如果相等则返回 0
否则 -1
DateTime date1 = DateTime(2020);
DateTime date2 = DateTime(2020);
print(date1.compareTo(date2)); // 0
最后
这里也为想要学习Flutter的朋友们准备了两份学习资料《Flutter Dart语言编程入门到精通》《Flutter实战》,从编程语言到项目实战,一条龙服务!!
《Flutter Dart 语言编程入门到精通》
- 第一章 Dart语言基础
- 第二章 Dart 异步编程
- 第三章 异步之 Stream 详解
- 第四章 Dart标准输入输出流
- 第五章 Dart 网络编程
- 第六章 Flutter 爬虫与服务端
- 第七章 Dart 的服务端开发
- 第八章 Dart 调用C语言混合编程
- 第九章 LuaDardo中Dart与Lua的相互调用
《Flutter实战:第二版》
- 第一章:起步
- 第二章:第一个Flutter应用
- 第三章:基础组件
- 第四章:布局类组件
- 第五章:容器类组件
- 第六章:可滚动组件
- 第七章:功能型组件
- 第八章:事件处理与通知
- 第九章:动画
- 第十章:自定义组件
- 第十一章:文件操作与网络请求
- 第十二章:Flutter扩展
- 第十三章:国际化
- 第十四章:Flutter核心原理
- 第十五章:一个完整的Flutter应用
标签:now,22,int,操作方法,DateTime,日期,2020,print,Dart From: https://blog.51cto.com/u_16163480/9110240