我在下面的代码中使用了日期时间,但是当我的startTime =“12:00 Pm”时,我的eventDate移动了下一个日期,当系统时间为12:00时,我的日期也会移到下一个日期。
帮我解释这段代码中的错误。
Date appt = new Date();
Calendar apptDate = new GregorianCalendar();
apptDate.setTime(appt);
String startTime = "11:00 Pm";
String[] appointmentHourMinute = startTime.split(":");
String hour = appointmentHourMinute[0];
String[] minuteAmPm = appointmentHourMinute[1].split(" ");
String minute = minuteAmPm[0];
String amPm = minuteAmPm[1];
int hourInt = Integer.parseInt(hour);
int minInt = Integer.parseInt(minute);
Calendar eventDate = new GregorianCalendar();
eventDate.set(Calendar.MONTH, apptDate.get(Calendar.MONTH));
System.out.println("Display Month"+ apptDate.get(Calendar.MONTH));
eventDate.set(Calendar.DATE, apptDate.get(Calendar.DATE));
System.out.println("Display Month"+ apptDate.get(Calendar.DATE));
eventDate.set(Calendar.YEAR, apptDate.get(Calendar.YEAR));
System.out.println("Display Month"+ apptDate.get(Calendar.YEAR));
eventDate.set(Calendar.HOUR, hourInt);
eventDate.set(Calendar.MINUTE, minInt);
eventDate.set(Calendar.SECOND, 0);
if (amPm.equalsIgnoreCase("AM")){
if(hourInt==12)
eventDate.set(Calendar.AM_PM,Calendar.PM);
else
eventDate.set(Calendar.AM_PM,Calendar.AM);
}else{
if(hourInt==12)
eventDate.set(Calendar.AM_PM,Calendar.AM);
else
eventDate.set(Calendar.AM_PM,Calendar.PM);
}
答案 0 :(得分:0)
首先,您告诉您想要12:00的日期,它将其解释为24小时,即中午。接下来你告诉它你想要一个“P.M.”时间。理解它,使用“P.M.”中午或午夜是模棱两可的,可能经常表示中午。但似乎在这种特殊情况下,Java会将其解释为午夜。一般来说,它假定A.M.时间是在一天的前半部分,所以当你从A.M.切换。到了P.M.它可以简单地在小时字段中添加12。哪个会在第二天的0:00转储你。
如果您想避免这种情况,您可能需要先设置时间,然后再设置日期。在您的情况下,这意味着首先阅读日期并在以后恢复日期。作为替代方案,你可以做到这一点+ 12小时处理自己,特殊情况下24:00回到0:00。