我们在上一章回中介绍了"如何获取当前系统语言"相关的内容,本章回中将介绍 如何获取当前时区.闲话休提,让我们一起Talk Flutter吧。
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可以获取时区标志;
- 获取时间标志时需要使用异步的方式,不然无法获取到时区标志;
看官们,与"如何获取当前时区"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!