Y at-il quelque chose de mal avec l'année SimpleDateFormat et la mise en forme de fuseau horaire

StackOverflow https://stackoverflow.com/questions/3844072

  •  27-09-2019
  •  | 
  •  

Question

Je suis à mes esprits finissent sur ce problème gênant. Fondamentalement, ne pouvait pas résoudre ce problème depuis longtemps.

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

produit:

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]

La question est ... POURQUOI?

Était-ce utile?

La solution

Je ne sais pas ce que vous avez et ce que vous aimeriez finir avec, mais je vois au moins une erreur majeure dans le code. Dans cette ligne

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

vous comparez String par référence, non par valeur. Vous devez utiliser Object#equals() chaque fois que vous voulez comparer deux objets différents. Un String est à savoir un objet, pas une primitive comme int, boolean, etc, pour lesquels le == fonctionnerait comme intented et attendu.

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

Cependant, je vous suggère d'utiliser le String#endsWith() méthode à la place. C'est non seulement plus concis, mais rend également le code plus auto-explication:

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

Cela dit, il y a une plus élégante indubitablement façon pour ce que vous souhaitez réaliser, mais étant donné que les exigences fonctionnelles ne sont pas claires, il est impossible de vous donner un exemple de coup d'envoi de cela.

Autres conseils

En passant par votre code, il ressemble suivant des lignes de code (qui vous attendez pour le formatage) est jamais exécuté.

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

Comme l'a justement souligné par BalusC, cela est dû à la déclaration conditionnelle invalide pour une chaîne comaprison. dire que vous utilisez « == » méthode au lieu de « de .equals ». Votre problème serait résolu en corrigeant même comme suggéré par BalusC en utilisant:

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

au lieu de:

if((this.Time.substring(this.Time.length() - 2) == "am")||(this.Time.substring(this.Time.length() - 2) == "pm"))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top