Y at-il quelque chose de mal avec l'année SimpleDateFormat et la mise en forme de fuseau horaire
-
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?
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"))