Android: material date picker opens on the wrong day

Đang mở Phù hợp với người mới
#1,077 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
76/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
javascript, react-native
Lĩnh vực
mobile

Hướng nghiên cứu

Bắt đầu với android/src/main/java/com/reactcommunity/rndatetimepicker/RNMaterialDatePicker.kt, đặc biệt là setInitialDate() và cách RNDate cung cấp ngày được chọn. Kiểm tra các bài kiểm thử bộ chọn ngày Android để xem chúng có bao phủ timeZoneName và các ngày gần ranh giới ngày UTC hay không. Công việc hoàn tất khi bộ chọn mở đúng ngày theo lịch địa phương dự định ở mọi múi giờ và có bài kiểm thử bao phủ lỗi hồi quy.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.

Ngôn ngữ chính
JavaScript
Star
2.9k
Fork
459
Merge trung bình
4 ngày 16 giờ
Pull request đã merge (30 ngày)
5

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của react-native-datetimepicker/datetimepicker

Tất cả issue của react-native-datetimepicker/datetimepicker

Issue tương tự

Thêm issue về JavaScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.