当我定义的时间或系统时间为12:00 Pm时,GregorianCalendar会更改我的日期

时间:2012-10-19 19:08:44

标签: java gregorian-calendar

我在下面的代码中使用了日期时间,但是当我的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);   
 }

1 个答案:

答案 0 :(得分:0)

首先,您告诉您想要12:00的日期,它将其解释为24小时,即中午。接下来你告诉它你想要一个“P.M.”时间。理解它,使用“P.M.”中午或午夜是模棱两可的,可能经常表示中午。但似乎在这种特殊情况下,Java会将其解释为午夜。一般来说,它假定A.M.时间是在一天的前半部分,所以当你从A.M.切换。到了P.M.它可以简单地在小时字段中添加12。哪个会在第二天的0:00转储你。

如果您想避免这种情况,您可能需要先设置时间,然后再设置日期。在您的情况下,这意味着首先阅读日期并在以后恢复日期。作为替代方案,你可以做到这一点+ 12小时处理自己,特殊情况下24:00回到0:00。