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はそれを真夜中と解釈するようです。一般に、AM時間は1日の前半であると想定しているため、AMからPMに切り替えると、時間フィールドに12を追加するだけで済みます。翌日の0:00にあなたを捨てます。

それを避けたい場合は、最初に時刻を設定し、後で日付を設定することをお勧めします。あなたの場合、これは最初に日付を読み、後でそれを復元することを意味します。別の方法として、この+ 12hを自分で処理し、特別な場合は24:00を0:00に戻すこともできます。

于 2012-10-19T20:00:12.580 に答える