Codenameone 是什么原因导致了;时间“;选择器以显示选择器中不同的小时

Codenameone 是什么原因导致了;时间“;选择器以显示选择器中不同的小时,codenameone,picker,Codenameone,Picker,设置时,初始时间设置为中午12点之后,显示屏上的值与选择器匹配。当设置为中午12点之前时,显示比选择器显示的值(正确值)大一小时 我需要做什么不同的事情 谢谢 Toolbar.setGlobalToolbar(true); Form hi = new Form("Picker", BoxLayout.y()); String text = "09:30"; // 24 hour format or "21:30" for pm int iHour = Integer.valueOf(text

设置时,初始时间设置为中午12点之后,显示屏上的值与选择器匹配。当设置为中午12点之前时,显示比选择器显示的值(正确值)大一小时

我需要做什么不同的事情

谢谢

Toolbar.setGlobalToolbar(true);
Form hi = new Form("Picker", BoxLayout.y());
String text = "09:30"; 
// 24 hour format or "21:30" for pm 
int iHour = Integer.valueOf(text.substring(0, 2)); 
int iMinute = Integer.valueOf(text.substring(3, 5)); 
Picker picker= new Picker();
picker.setType(Display.PICKER_TYPE_TIME);
picker.setTime(iHour, iMinute);         
hi.add(picker);
hi.show();

更改Picker.java行326
原件:setText(两位数(小时%13+1)+“:“+两位数(分钟)+文本);
解决方案:setText(两位数)(hour
//这是解决问题的一种方法
选择器=新选择器(){
受保护字符串两位数(整数i){
如果(i<10){
返回“0”+i;
}
返回“+i”;
}
@凌驾
受保护的void updateValue(){
如果(getFormatter()!=null){
setText(getFormatter().format(getDate());
返回;
}
开关(选择器类型){
case Display.PICKER\u类型\u字符串:
setText(getSelectedString());
打破
案例显示。选取器类型日期:
setText(L10NManager.getInstance().formatDateShortStyle(getDate());
打破
案例显示.PICKER\u类型\u时间:
试一试{
intv=getTime();
整小时=v/60;
整数分钟=v%60;
如果(showMeridiem){
字符串文本;
如果(小时>=12){
text=“pm”;
}否则{
text=“am”;
}

setText(两位数(小时)如何在代码中执行此操作?您的时区是什么?在哪种设备类型/OS版本上?String text=“09:30”//24小时格式或pm int iHour=Integer.valueOf(text.substring(0,2));int iMinute=Integer.valueOf(text.substring(3,5));picker.setTime(iHour,iMinute);Android,不考虑时区。时区可能是本机版本和代号版本之间存在差异的原因。我假设9:30正确显示在UI中,但当您单击设备上的按钮时,会显示小时UI?哪个版本的Android?您尝试了多个设备吗?抱歉,返回时出现延迟对你来说。实际上情况正好相反。用户界面显示的是上午10:30,但选择器显示的是正确的上午9:30,而晚上9:30在用户界面和选择器中都显示正确。这发生在Android 6.0上。我将在4.04、4.1.2上加载它,然后在iPhone 4s和6plus上加载。它也显示在模拟器中。唯一的区别是我有picker.setShowMeridiem(true);我想应该是false。我将setShowMeridiem设置为false,我得到了您得到的结果,但晚上9:30显示为21:30。当setShowMeridiem为true时,选择器(可滚动滚轮)显示9:30,但屏幕上的文本显示为上午10:30。我会发布屏幕截图,但我不知道如何将它们添加到评论中。问题出现在Picker.java的第326行“[Picker]316:value=540 317:hour=9318:minute=0 319:showMeridiem=true 321:hour>=12 false 324:text=“am”;326:setText(两位数(小时%13+1)+”:”+两位数(分钟)+文本;238:两位数(inti=10){242:返回“10”;238:两位数(inti=0){242:返回“01”;[LABEL]219:公共void setText(String text=“10:00am”){`
Changing Picker.java line 326
original: setText(twoDigits(hour % 13 + 1) + ":" + twoDigits(minute) + text);
solution: setText(twoDigits(hour <= 12 ? hour : hour - 12) + ":" + twoDigits(minute) + text);

fixes the showMeridiem problem for am hours.
// This is a work around to the problem

picker = new Picker() {

    protected String twoDigits(int i) {
        if(i < 10) {
            return "0" + i;
        }
        return "" + i;
    }

    @Override
    protected void updateValue() {
        if (getFormatter() != null) {
            setText(getFormatter().format(getDate()));
            return;
        }
        switch (pickerType) {
            case Display.PICKER_TYPE_STRINGS:
                setText(getSelectedString());
                break;
            case Display.PICKER_TYPE_DATE:
                setText(L10NManager.getInstance().formatDateShortStyle(getDate()));
                break;
            case Display.PICKER_TYPE_TIME:
                try {
                    int v = getTime();
                    int hour = v / 60;
                    int minute = v % 60;
                    if (showMeridiem) {
                        String text;
                        if (hour >= 12) {
                            text = "pm";
                        } else {
                             text = "am";
                        }
                        setText(twoDigits(hour <= 12 ? hour : hour - 12, 2) + ":" +  twoDigits(minute) + text));
                    } else {
                        setText(twoDigits(hour) + ":" + twoDigits(minute));
                    }
                } catch (Exception e) {
                }
                break;
            case Display.PICKER_TYPE_DATE_AND_TIME:
                setText(L10NManager.getInstance().formatDateTimeShort(getDate()));
                break;
            }
        }
    };
}