2012-05-14 9 views
2

2011年の代わりに2077が出力される理由は誰にも分かりますか?それは実際にコンパイルするよう奇妙なJavaのカレンダーの振る舞い

Integer yyyyMMdd = 20110830 
Calendar day = Calendar.getInstance(TimeZone.DEFAULT); 

Integer dd = yyyyMMdd % 100; 
Integer yyyy = yyyyMMdd/10000; 

day.set(yyyy, MM-1, dd); 

System.err.println(day.getTimeInMillis()); 
+1

?また、Calendar.setLenient(false);を追加してみてください。 2行目の後にもう一度実行してください。 –

+0

なぜ、どこでも 'int'ではなく' Integer'を使用していますか?ここで*問題*を引き起こすことはありませんが、それははっきりと奇妙です。 –

+0

ああ、 'TimeZone.DEFAULT'はどこから来たのですか?最初の行にセミコロンもありません。問題を表示する場合は、実際のコードを投稿してください。 –

答えて

5

があなたのコードを固定したので、私が期待される結果を得る - ので、おそらくそれはあなたがが本当に走っていたが、示されていないコードのバグです。ここに私のコードは次のとおりです。私のマシンで

import java.util.*; 

class Test { 
    public static void main(String[] args) { 
     int yyyyMMdd = 20110830; 
     Calendar day = Calendar.getInstance(TimeZone.getDefault()); 

     int dd = yyyyMMdd % 100; 
     int MM = (yyyyMMdd % 10000)/100; 
     int yyyy = yyyyMMdd/10000; 

     day.set(yyyy, MM-1, dd); 

     System.err.println(day.getTime()); 
    } 
} 

結果:MMから来たん

Tue Aug 30 07:18:33 BST 2011 
+0

ありがとう、ジョン。あなたは正しかった。私のコードは本当にゴミだった – Ash1986