Frage

Ich bin bis zu meinem Verstand auf diesem lästigen Problem zu beenden. Im Grunde konnte nicht behebt dies für eine lange Zeit.

     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);

Dies erzeugt:

2010 Fri Oct 1 10:00am 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]

Die Frage ist ... Warum?

War es hilfreich?

Lösung

Ich habe keine Ahnung, was Sie haben und was Sie möchten, mit am Ende, aber ich sehe zumindest einen großen Fehler im Code. In dieser Zeile

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

Sie vergleichen String Bezug genommen wird, nicht von Wert. Sie sollten verwenden Object#equals() , wenn Sie zwei verschiedene Objekte vergleichen wollen. Ein String ist nämlich ein Objekt, nicht eine primitive wie int, boolean, etc, für die der == als intented funktionieren würde, und erwartet.

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

Allerdings würde ich vorschlagen, die String#endsWith() Methode statt. Das ist nicht nur knapper, sondern auch macht den Code selbsterklärend:

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

Having said that, gibt es unzweifelhaft eine elegantere Möglichkeit für was auch immer Sie möchten erreichen, aber da die funktionalen Anforderungen unklar sind, ist es unmöglich, Ihnen ein Kickoff Beispiel dafür zu geben.

Andere Tipps

Wenn man durch Ihren Code sieht es aus wie Codezeilen folgenden (die Sie für die Formatierung erwarten) wird nie ausgeführt.

 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");

Wie zu Recht von BalusC wies darauf hin, dies ist aufgrund ungültiger bedingte Anweisung für String comaprison. das heißt Sie „==“ anstelle von „.equals“ Methode verwenden. Ihr Problem gleichen gelöst werden würde durch eine Korrektur, wie durch BalusC unter Verwendung vorgeschlagen:

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

statt:

if((this.Time.substring(this.Time.length() - 2) == "am")||(this.Time.substring(this.Time.length() - 2) == "pm"))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top