前言
时间戳及时间的处理是我们经常遇见的,所以这里做一个使用总结
UTC和GMT
结论:Fluter中推荐使用UTC时间,因为它们不受夏令时变化的影响,也不受当地时区的影响(不过似乎国内应用无所谓用哪个
构造
基于UTC的DateTime实例
DateTime.utc(int year, [ int month = 1 int day = 1 int hour = 0 int minute = 0 int second = 0 int millisecond = 0 int microsecond = 0 ])
基于本地时区的DateTime实例
DateTime(int year, [ int month = 1 int day = 1 int hour = 0 int minute = 0 int second = 0 int millisecond = 0 int microsecond = 0 ])
属性
-
获取毫秒级时间戳;秒级时间戳/1000再去0即可
external int get millisecondsSinceEpoch; -
获取微秒级时间戳;
external int get microsecondsSinceEpoch;
方法
-
add传入的Duration实例所表示的时间间隔,返回一个新的DateTime实例,新实例与调用实例之间的时间差为duration
add(Duration duration) → DateTime -
减去传入的Duration实例所表示的时间间隔,返回一个新的DateTime实例,新实例与调用实例之间的时间差为duration
subtract(Duration duration) → DateTime -
距离1970年1月1日0时0分0秒的微秒数,根据时间戳转换成DateTime
DateTime.fromMicrosecondsSinceEpoch(int microsecondsSinceEpoch, { bool isUtc: false }) -
距离1970年1月1日0时0分0秒的毫秒数,根据时间戳转换成DateTime
DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch, { bool isUtc: false }) -
基于本地时区的当前时间的DateTime实例
DateTime.now() -
通过标准格式的字符串来构造一个DateTime实例,这里格式为 YYYY-MM-DD,时间格式为 HH:MM:SS[:.SS],时区偏移量可以是 "Z" 或 "-HH:MM" 或 "+HH:MM"
parse(String formattedString) → DateTime
DateTime使用例子
如果我想获取一年前的当前时间
var yearAgo = DateTime.now().subtract(Duration(year: 1))// 2022-12-19 21:17:53.196465
这里就用了subtract倒推了前一年,Duration的入参可以是年也可以是月,add同理
还有一点,yearAgo.year.toString()你就可以获取到当前的年份,同理.month、.day都可以获取到月或者天,这样子就可以根据获取到的内容拼接出yyyy-mm-dd或者dd/mm/yyyy;
(一般国外使用)当然也可以使用intl/intl.dart包中的DateFormat.yMd().format(yearAgo);获取到样式为mm/dd/yyyy的内容
(一般国内使用)或者引用common_utils库中DateUtil的formatDate(yearAgo,DateFormats.full)获取到样式为yyyy-MM-dd HH:mm:ss的内容。另外这个库中还有是否是当天,昨天,本周,同年,闰年,星期几的判断,非常推荐
其实他们本质上都是获取到对应的yyyy去做替换而已
时间戳的获取
可以用yearAgo.millisecondsSinceEpoch获取毫秒级的时间戳
可以用yearAgo.microsecondsSinceEpoch获取毫秒级的时间戳