Any app you implement in Flutter, that has server times – most probably will also need to get the current time zone on the user device.
1. Get the device’s local time zone name
Example: America/New_York, Asia/Kolkata
Using flutter_native_timezone
This gives the actual system time zone, not just an offset.
Add dependency
dependencies:
flutter_native_timezone: ^2.0.0
Code
import 'package:flutter_native_timezone/flutter_native_timezone.dart';
Future<void> getTimeZone() async {
String timeZone = await FlutterNativeTimezone.getLocalTimezone();
print(timeZone);
}
✅ Best when you need accurate timezone IDs
✅ Works on Android & iOS
2. Get the UTC offset (no package needed)
Example: +05:30, -04:00
DateTime now = DateTime.now();
Duration offset = now.timeZoneOffset;
print(offset); // e.g. 5:30:00
To format it:
String formatOffset(Duration offset) {
final hours = offset.inHours;
final minutes = offset.inMinutes.remainder(60);
return '${hours >= 0 ? '+' : '-'}'
'${hours.abs().toString().padLeft(2, '0')}:'
'${minutes.abs().toString().padLeft(2, '0')}';
}
print(formatOffset(now.timeZoneOffset)); // +05:30
3. Get the time zone abbreviation
Example: IST, EST, PDT
DateTime now = DateTime.now();
print(now.timeZoneName);
⚠️ This is not reliable across platforms and locales.
4. Full timezone support (convert between zones)
If you need to convert times across time zones:
Add dependencies
dependencies:
timezone: ^0.11.1
flutter_native_timezone: ^2.0.0
Initialize
import 'package:timezone/data/latest.dart' as tz;
import 'package:timezone/timezone.dart' as tz;
Future<void> initTimeZones() async {
tz.initializeTimeZones();
final String localTimeZone =
await FlutterNativeTimezone.getLocalTimezone();
tz.setLocalLocation(tz.getLocation(localTimeZone));
}
