diff --git a/CodenameOne/src/com/codename1/ui/spinner/CalendarPicker.java b/CodenameOne/src/com/codename1/ui/spinner/CalendarPicker.java index 8b383d392e..b5d7f08c86 100644 --- a/CodenameOne/src/com/codename1/ui/spinner/CalendarPicker.java +++ b/CodenameOne/src/com/codename1/ui/spinner/CalendarPicker.java @@ -26,6 +26,7 @@ import com.codename1.ui.layouts.BorderLayout; import java.util.Date; +import java.util.TimeZone; /** * A Calendar Picker widget. Used by the picker. @@ -58,4 +59,12 @@ public void setValue(Object value) { } + public void setTimeZone(TimeZone tmz) { + calendar.setTimeZone(tmz); + } + + public TimeZone getTimeZone() { + return calendar.getTimeZone(); + } + } diff --git a/maven/core-unittests/src/test/java/com/codename1/ui/spinner/CalendarPickerTest.java b/maven/core-unittests/src/test/java/com/codename1/ui/spinner/CalendarPickerTest.java new file mode 100644 index 0000000000..500a1e6bd0 --- /dev/null +++ b/maven/core-unittests/src/test/java/com/codename1/ui/spinner/CalendarPickerTest.java @@ -0,0 +1,45 @@ +package com.codename1.ui.spinner; + +import com.codename1.ui.Calendar; +import com.codename1.junit.UITestBase; +import org.junit.jupiter.api.Test; + +import java.util.Date; +import java.util.TimeZone; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CalendarPickerTest extends UITestBase { + + @Test + public void testTimezoneIssue() { + TimeZone originalDefault = TimeZone.getDefault(); + try { + // Set default timezone to UTC-8 (PST) to simulate user environment + TimeZone.setDefault(TimeZone.getTimeZone("GMT-08:00")); + + CalendarPicker picker = new CalendarPicker(); + + // Set the picker timezone to UTC to match the target date timezone + picker.setTimeZone(TimeZone.getTimeZone("UTC")); + + java.util.Calendar calendar = java.util.Calendar.getInstance(); + calendar.setTimeZone(TimeZone.getTimeZone("UTC")); + calendar.set(2023, java.util.Calendar.FEBRUARY, 10, 0, 0, 0); + calendar.set(java.util.Calendar.MILLISECOND, 0); + Date target = calendar.getTime(); + + picker.setValue(target); + Date picked = (Date) picker.getValue(); + java.util.Calendar pickedCalendar = java.util.Calendar.getInstance(TimeZone.getTimeZone("UTC")); + pickedCalendar.setTime(picked); + + assertEquals(calendar.get(java.util.Calendar.YEAR), pickedCalendar.get(java.util.Calendar.YEAR)); + assertEquals(calendar.get(java.util.Calendar.MONTH), pickedCalendar.get(java.util.Calendar.MONTH)); + assertEquals(calendar.get(java.util.Calendar.DAY_OF_MONTH), pickedCalendar.get(java.util.Calendar.DAY_OF_MONTH)); + + } finally { + TimeZone.setDefault(originalDefault); + } + } +}