1

我正在使用以下代码作为日期时间,但是当我的 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);   
 }
4

1 回答 1

0

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

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

于 2012-10-19T20:00:12.580 回答