flutter如何获取时区

在Flutter开发中,如何获取当前设备的时区信息?我尝试使用DateTime.now().timeZoneName,但返回的时区缩写(如CST)不够明确。有没有办法获取完整的时区名称(如Asia/Shanghai)或时区偏移量?官方文档中提到dart:ioPlatform类可能相关,但在跨平台使用时是否有更优雅的解决方案?

2 回复

Flutter中获取时区可以使用flutter_native_timezone包,或通过DateTime类获取时区偏移量。例如:DateTime.now().timeZoneOffset返回当前时区与UTC的偏移量。

更多关于flutter如何获取时区的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,可以通过以下方法获取设备当前时区:

1. 使用 dart:core 库的 DateTime

DateTime now = DateTime.now();
String timeZoneName = now.timeZoneName;    // 例如:"CST"
String timeZoneOffset = now.timeZoneOffset.toString(); // 例如:8:00:00.000000

2. 使用 flutter_native_timezone 包(推荐)

这个包可以获取更准确的本地时区名称。

安装依赖:

dependencies:
  flutter_native_timezone: ^2.0.0

使用方法:

import 'package:flutter_native_timezone/flutter_native_timezone.dart';

// 获取时区名称
String timeZone = await FlutterNativeTimezone.getLocalTimezone();
// 返回结果示例:"Asia/Shanghai"

3. 获取时区偏移量

DateTime now = DateTime.now();
Duration timeZoneOffset = now.timeZoneOffset;
String offsetString = timeZoneOffset.toString(); // 例如:"8:00:00.000000"

// 转换为小时数
int offsetHours = timeZoneOffset.inHours;

注意事项:

  • DateTime.now().timeZoneName 在不同平台上可能返回不同的缩写
  • flutter_native_timezone 包返回的是 IANA 时区标识符,更标准可靠
  • 时区偏移量会受夏令时影响

推荐使用 flutter_native_timezone 包来获取标准时区名称,这样在不同平台上都能获得一致的结果。

回到顶部