1

私はこの厄介な問題に頭を悩ませています。基本的にこれは長い間修正できませんでした。

     java.util.Calendar calendar_now = java.util.Calendar.getInstance();
     java.util.Calendar calendar_entry = java.util.Calendar.getInstance();
     java.util.Date dt = new Date();
     java.text.SimpleDateFormat formatter;
  try{
     // if(this.Time.length() == 0) {this.Time = "00:00";}
     //this.Time = "00:00";
     // System.out.println("*" + this.Time + "*");
     if((this.Time.substring(this.Time.length() - 2) == "am")||(this.Time.substring(this.Time.length() - 2) == "pm"))
     {
      formatter = new SimpleDateFormat("yyyy E MMM d H:mmaa z",Locale.US);
       dt = (Date)formatter.parse(calendar_now.get(java.util.Calendar.YEAR) + " " + this.Date + " " + this.Time + " EST");
      //calendar_entry.setTimeZone(java.util.TimeZone.getTimeZone("America/New_York"));
     }
      calendar_entry.setTime(dt);
      if (calendar_entry.get(java.util.Calendar.MONTH) < calendar_now.get(java.util.Calendar.MONTH)){
       calendar_entry.set(java.util.Calendar.YEAR,calendar_now.get(java.util.Calendar.YEAR) + 1);
      }
    else{
       calendar_entry.set(java.util.Calendar.YEAR,calendar_now.get(java.util.Calendar.YEAR));
    }
//    calendar_entry.setTimeZone(java.util.TimeZone.getTimeZone("GMT"));
      System.out.println(calendar_now.get(java.util.Calendar.YEAR) + " " + this.Date + " " + this.Time + " EST");
      System.out.println(dt.toString());
      System.out.println(calendar_entry);

これにより、次が生成されます。

2010 年 10 月 1 日(金)午前 10 時(EST)
Thu Oct 01 10:00:00 SGT 1970
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.uti
l.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],fi
rstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2010,MONTH=9,WEEK_OF_YEAR=40,WEEK_OF_MONTH=1,DAY_
OF_MONTH=1,DAY_OF_YEAR=274,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=2,HOUR_OF_DAY=2,MINUTE=
30,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]

質問は...なぜですか?

4

2 に答える 2

1

あなたが何を持っていて、最終的に何をしたいのかわかりませんが、コードに少なくとも 1 つの大きな間違いがあります。この行で

if((this.Time.substring(this.Time.length() - 2) == "am")||(this.Time.substring(this.Time.length() - 2) == "pm"))

String値ではなく参照で比較しています。Object#equals()2 つの異なるオブジェクトを比較する場合は常に使用する必要があります。AStringはつまり、intbooleanなどのようなプリミティブではなく、==が意図および期待どおりに機能するオブジェクトです。

if((this.Time.substring(this.Time.length() - 2).equals("am"))||(this.Time.substring(this.Time.length() - 2).equals("pm")))

ただし、String#endsWith()代わりにメソッドを使用することをお勧めします。これにより、より簡潔になるだけでなく、コードがより自明になります。

if (this.Time.endsWith("am") || this.Time.endsWith("pm")) 

そうは言っても、達成したいことには間違いなくもっとエレガントな方法がありますが、機能要件が明確でないため、そのキックオフ例を示すことは不可能です.

于 2010-10-02T02:45:52.720 に答える
1

コードを調べると、次のコード行 (書式設定に必要な行) が実行されないように見えます。

 formatter = new SimpleDateFormat("yyyy E MMM d H:mmaa z",Locale.US);
 dt = (Date)formatter.parse(calendar_now.get(java.util.Calendar.YEAR) + " " + this.Date + " " + this.Time + " EST");

BalusC が正しく指摘したように、これは文字列比較の無効な条件文が原因です。つまり、「.equals」メソッドの代わりに「==」を使用しています。あなたの問題は、次を使用してBalusCによって提案されたのと同じように修正することで解決されます:

if (this.Time.endsWith("am") || this.Time.endsWith("pm")) 

それ以外の:

if((this.Time.substring(this.Time.length() - 2) == "am")||(this.Time.substring(this.Time.length() - 2) == "pm"))
于 2010-10-02T03:38:45.087 に答える