A Simple react native module to get the Timezone and the Region of the Android/iOS devices.
Unlike other timezone/region libraries, react-native-timezone does NOT require:
- ❌ Location permissions (
ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION) - ❌
READ_PHONE_STATEpermission (Android) - ❌ Additional native dependencies
This is critical for:
- Privacy-conscious apps
- App Store/Play Store approval (permission justifications)
- GDPR/CCPA compliance
Works seamlessly with Expo Development Builds (CNG - Continuous Native Generation):
npx expo install react-native-timezone
npx expo prebuild
npx expo run:iosNo need for bare React Native workflow—just prebuild and run.
- Zero JavaScript dependencies
- Native TurboModule (synchronous, no bridge overhead)
- Minimal footprint (~2KB gzipped)
Fully compatible with React Native's New Architecture (Fabric + TurboModules).
| React Native | New Architecture | Tested | Notes |
|---|---|---|---|
| 0.71.x | ✅ Stable | ✅ | First stable TurboModule support |
| 0.72.x | ✅ | ✅ | |
| 0.73.x | ✅ | ✅ | |
| 0.74.x | ✅ Default | ✅ | New Arch enabled by default |
| 0.76.x | ✅ | ✅ | |
| 0.83.x | ✅ | ✅ | Latest (Feb 2026) |
Breaking Changes in React Native:
- 0.71: New Architecture stabilized (TurboModules + Fabric)
- 0.74: New Architecture enabled by default
- 0.76: Minimum iOS deployment target raised to iOS 15.1
Apple has deprecated the entire CTCarrier class with no replacement API:
| API | Deprecated Since | Status |
|---|---|---|
subscriberCellularProvider |
iOS 12 | |
serviceSubscriberCellularProviders |
iOS 16 | |
CTCarrier class |
iOS 16 | ❌ No replacement |
What this means for getRegionByTelephony():
- iOS < 18: Works, but triggers deprecation warnings (suppressed in this library)
- iOS 18+: Returns
nulldue to Apple's privacy restrictions
Recommended Pattern:
// Use telephony-based region with locale fallback
const region = Timezone.getRegionByTelephony() ?? Timezone.getRegionByLocale();This is an Apple platform limitation, not a bug in this library.
For a project of mine, I had to acquire the currently selected timezone of the user. Unfortunately, I could not find any react native package or react native in-build function that facilitates this. Thus I created a small library.
v3.0.0 and above, you can access the Region details. More details can be found below.
yarn add react-native-timezone
Do cd ios/ && pod install or npx pod-install.
import TimeZone from 'react-native-timezone';
export default function App() {
React.useEffect(() => {
const timezone = Timezone.getTimeZone();
const isAutoTimeZoneEnabled = Timezone.isAutoTimeZoneEnabled();
const telephonyRegion = Timezone.getRegionByTelephony();
const localeRegion = Timezone.getRegionByLocale();
// Update state or use data as needed
}, []);
// Render your component
}Check out the example folder.
| API | Description |
|---|---|
| getTimeZone | Android: Returns timezone ID using java.util.TimeZone.getID()iOS: Reflects the current system time zone using localTimeZone of NSTimeZone |
| isAutoTimeZoneEnabled | Returns a boolean indicating if auto timezone is enabled on the device (Android Only) |
| getRegionByTelephony | Retrieves the region information based on the telephony (SIM card) of the device. Returns null if the device has no SIM card. |
| getRegionByLocale | Retrieves the region information based on the device's locale settings |