Fix Android timezone issues #431
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
I have find out issue while using datetime picker for RN App with timezone handling.
I need to use fixed timezone through whole app. As I found out, from last releases datetime picker should not be device timezone dependent if you've passed
timeZoneOffsetInMinutesprop intoDateTimePickercomponent (as the docs says). iOS works really well, but as it turns out, Android is not so good. (To be correct it doesn't apply timezone in some cases at all 😄). This proposal should fix that issue for Android. (At least it works for us). (I will describe steps to reproduce and technical source of the issue below)Test Plan
Display initially passed date (input)
device: GMT +3,app: GMT -7)2021-04-09T17:00:00.000Zdate (for UTC it stands for 17:00, but for app timezone-7it should be treated like10:00)timeZoneOffsetInMinutes={-420}prop (-420 = -7 * 60)TimePickershould display10:00as initial selected dateTimePickerdisplays17:00as initial selected dateAccording to this fact we can suppose what
timeZoneOffsetInMinutesprop is ignored and UTC hours & minutes are displayed instead.What's required for testing (prerequisites)?
GMT -7)device: GMT +3,app: GMT -7)What are the steps to reproduce (after prerequisites)?
Compatibility
Changes Motivation
RNDate.java
timeZoneOffsetInMinutestype acts randomly. In one case it'sIntegertype, in other case it'sLongtype. So I appliedLongJava type compatibility (fallback forgetInt).datetimepicker.android.js
ifstatement fortimeZoneOffsetDateSetterfunction which is called for time settings after promise from native Android method is resolved. I really don't get any reasons for ignoring negativetimeZoneOffsetInMinutesvalue. (even docs showing example withGMT -7 = - 420 minutes)Checklist