Codenameone 是什么原因导致了;时间“;选择器以显示选择器中不同的小时
设置时,初始时间设置为中午12点之后,显示屏上的值与选择器匹配。当设置为中午12点之前时,显示比选择器显示的值(正确值)大一小时 我需要做什么不同的事情 谢谢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
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;
}
}
};
}