在 Flutter 中,可以通过以下方法获取设备时区:
1. 使用 dart:core 库的 DateTime 类
DateTime now = DateTime.now();
String timeZoneName = now.timeZoneName; // 获取时区名称(如:CST、EST)
int timeZoneOffset = now.timeZoneOffset; // 获取与 UTC 的时差(小时)
2. 使用 flutter_native_timezone 包(推荐用于获取精确时区)
dependencies:
flutter_native_timezone: ^2.0.0
import 'package:flutter_native_timezone/flutter_native_timezone.dart';
String currentTimeZone = await FlutterNativeTimezone.getLocalTimezone();
// 返回格式:Asia/Shanghai、America/New_York
3. 完整示例
import 'package:flutter/material.dart';
import 'package:flutter_native_timezone/flutter_native_timezone.dart';
class TimeZoneExample extends StatefulWidget {
@override
_TimeZoneExampleState createState() => _TimeZoneExampleState();
}
class _TimeZoneExampleState extends State<TimeZoneExample> {
String _timeZone = '';
@override
void initState() {
super.initState();
_getTimeZone();
}
_getTimeZone() async {
// 方法1:使用 flutter_native_timezone
final String nativeTimezone = await FlutterNativeTimezone.getLocalTimezone();
// 方法2:使用 DateTime
final DateTime now = DateTime.now();
setState(() {
_timeZone = '原生时区: $nativeTimezone\n'
'时区名称: ${now.timeZoneName}\n'
'UTC偏移: ${now.timeZoneOffset}';
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text(_timeZone),
),
);
}
}
注意事项:
DateTime.timeZoneName 返回的是缩写(可能不唯一)
flutter_native_timezone 返回的是 IANA 时区标识(更精确)
- 时区偏移量
timeZoneOffset 包含夏令时调整
选择方案根据需求决定:如只需显示时差可用 DateTime,需要精确时区识别建议使用 flutter_native_timezone。