第三百五十二回

文章目录

  • 1. 概念介绍
  • 2. 获取方法
  • 3. 示例代码
  • 4. 对比与总结
    • 4.1 横向对比
    • 4.2 内容总结

我们在上一章回中介绍了"如何获取当前系统语言"相关的内容,本章回中将介绍如何获取当前时区.闲话休提,让我们一起Talk Flutter吧。

第三百五十二回_第1张图片

1. 概念介绍

我们使用的北京时间也叫CST,不过它不是国际标准时间,国际标准时间为UTC,我们国家位于东八区,因此也用UTC+8来表示北京时间。不过这种表示方式有时候不够直
观,需要我们查阅时区后才能知道。我们在本章回中介绍的时区主要是时区的标志,比如我们常用的北京时间的时区标志是Asia/Shanghai,从名字上就能直观地看到当
前时区所处于的地理位置。本章回中将介绍如何获取这种时区标志。

2. 获取方法

我们可以使用dart中的DateTime类来获取时区,具体代码为:DateTime.now().timeZoneName,不它获取到的是cst,utc这样的时区,而不是我们想的带有城市
名称的时区标志。我查阅了DateTime类的所有接口,没有找到可以获取到时区标志的方法。于是只好在pub中查找,功夫不负有心人,终于找到了一个可以获取时区标志
的三方包:flutter_timezone,通过包中的getLocalTimezone()方法可以获取当前的时区标志。

3. 示例代码

var timeZone = FlutterTimezone.getLocalTimezone().then((value){
  debugPrint("future timeZone: ${value.toString()}");
});

void getTimeZone () async {
  ///获取时区,输出:async timeZone: Asia/Shanghai
  var value = await FlutterTimezone.getLocalTimezone();
  debugPrint("async timeZone: ${value.toString()}");
}

我们在上面的示例代码中演示了两种获取时区标志的方法,它们都使用了异步的方法去获取到时区标志,只是表现形式不同而已。

4. 对比与总结

4.1 横向对比

与Java中的时间类相比,dart中的时间类功能比较少,比如本章回中获取时区标志还需要借助三方包来实现。其实在Java8之前的时间类也不是很好用,直到Java8才
对时间类有了比较大的更新。我预测dart在未来的版本中还会对时间类做更新。此外,我们虽然通过三方包获取到时区标志了,但是需要通过异步的方式来获取,我感觉
时区完全可以通过当前时间计算出来,为什么要做成异步的机制?使用起来十分不方便,对比一下Java中的时间类,可以直接获取到时区标记。

4.2 内容总结

最后,我们对本章回中的内容做一个全面的总结:

  • 使用DateTiem类可以获取到时区名称,比如utc,cst;
  • 使用三方包flutter_timezone可以获取时区标志;
  • 获取时间标志时需要使用异步的方式,不然无法获取到时区标志;
    看官们,与"如何获取当前时区"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

你可能感兴趣的:(一起Talk,Flutter吧,移动开发Flutter)