Flutter 中时间戳及时间的处理

767 阅读2分钟

前言

时间戳及时间的处理是我们经常遇见的,所以这里做一个使用总结

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 ])

属性

  1. 获取毫秒级时间戳;秒级时间戳/1000再去0即可

    external int get millisecondsSinceEpoch;

  2. 获取微秒级时间戳;

    external int get microsecondsSinceEpoch;

方法

  1. add传入的Duration实例所表示的时间间隔,返回一个新的DateTime实例,新实例与调用实例之间的时间差为duration

    add(Duration duration) → DateTime

  2. 减去传入的Duration实例所表示的时间间隔,返回一个新的DateTime实例,新实例与调用实例之间的时间差为duration

    subtract(Duration duration) → DateTime

  3. 距离1970年1月1日0时0分0秒的微秒数,根据时间戳转换成DateTime

    DateTime.fromMicrosecondsSinceEpoch(int microsecondsSinceEpoch, { bool isUtc: false })

  4. 距离1970年1月1日0时0分0秒的毫秒数,根据时间戳转换成DateTime

    DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch, { bool isUtc: false })

  5. 基于本地时区的当前时间的DateTime实例

    DateTime.now()

  6. 通过标准格式的字符串来构造一个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库中DateUtilformatDate(yearAgo,DateFormats.full)获取到样式为yyyy-MM-dd HH:mm:ss的内容。另外这个库中还有是否是当天,昨天,本周,同年,闰年,星期几的判断,非常推荐

其实他们本质上都是获取到对应的yyyy去做替换而已

时间戳的获取

可以用yearAgo.millisecondsSinceEpoch获取毫秒级的时间戳

可以用yearAgo.microsecondsSinceEpoch获取毫秒级的时间戳