Android: material date picker opens on the wrong day

Aperta Adatta ai principianti
#1,077 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
76/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
javascript, react-native
Ambito
mobile

Direzione di ricerca

Inizia da android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt, in particolare da setInitialDate() e da come RNDate fornisce la data selezionata. Controlla se i test del selettore di date Android coprono timeZoneName e le date vicine ai confini dei giorni UTC. Il lavoro è completato quando il selettore si apre nel giorno di calendario locale previsto in tutti i fusi orari e un test copre la regressione.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Hi!

Thank you for your work on this project!

RNMaterialDatePicker passes the raw value timestamp to setSelection, but MaterialDatePicker interprets the selection as a UTC day. The initial day therefore ignores timeZoneName and the device time zone, and can be off by one.

For example, with timeZoneName: 'Europe/Brussels', a value of 10 November 00:10 opens on 9 November, because that moment is still 9 November in UTC. Zones behind UTC can open a day late in the same way.

This diff solved the problem, but I'm not sure if it's the ideal solution:

diff --git a/node_modules/@react-native-community/datetimepicker/android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt b/node_modules/@react-native-community/datetimepicker/android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt
index 9dece7a..d1910aa 100644
--- a/node_modules/@react-native-community/datetimepicker/android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt
+++ b/node_modules/@react-native-community/datetimepicker/android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt
@@ -16,6 +16,7 @@ import com.google.android.material.datepicker.MaterialDatePicker
 import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener
 import com.google.android.material.R
 import java.util.Calendar
+import java.util.TimeZone
 
 class RNMaterialDatePicker(
   private val args: Bundle,
@@ -46,7 +47,11 @@ class RNMaterialDatePicker(
 
   private fun setInitialDate() {
     val initialDate = RNDate(args)
-    builder.setSelection(initialDate.timestamp())
+    // Material reads the selection as a UTC day, so pass the day in the picker's time zone as UTC midnight
+    val selection = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
+    selection.clear()
+    selection.set(initialDate.year(), initialDate.month(), initialDate.day())
+    builder.setSelection(selection.timeInMillis)
   }
 
   private fun setTitle() {

This issue body was partially generated by patch-package.

Lingua principale
JavaScript
Stelle
2.9k
Fork
459
Merge medio
4g 16h
PR unite (30g)
5

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di react-native-datetimepicker/datetimepicker

Tutte le issue di react-native-datetimepicker/datetimepicker

Issue simili

Altre issue su JavaScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.