2016-12-26 12 views
2

次のコードがあります。カレンダーで年を設定する

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/YYYY HH:mm"); 
Calendar cal = Calendar.getInstance(); 
cal.clear(); 
cal.set(Calendar.YEAR, 2016); 
cal.set(Calendar.MONTH, 11); 
cal.set(Calendar.DAY_OF_MONTH, 31); 
cal.set(Calendar.HOUR_OF_DAY, 22); 
Date start = cal.getTime(); 
System.out.println(dateFormat.format(start)); 
cal.set(Calendar.YEAR, 2017); 
cal.set(Calendar.MONTH, 0); 
cal.set(Calendar.DAY_OF_MONTH, 1); 
cal.set(Calendar.HOUR_OF_DAY, 5); 
Date end = cal.getTime(); 
System.out.println(dateFormat.format(end)); 

それは印刷されます。

31/12/2016 22:00 
01/01/2016 05:00 

私は2番目の日付の年は何が起こっているか2017年であることを期待しますか?私はJava 1.7を使用しています。

+0

あなたの 'dateFormat'とは何ですか? –

+1

私は '31-12-2016 22:00'と' 01-01-2017 05:00'を得ました – GurV

+1

私はちょうどあなたのコードを走らせました。フルバージョンでコードを更新できますか?それ以外のものが影響を与える可能性がありますか?スレッドのような? – Josh

答えて

2

正しい日付形式は小文字yに注意し、dd/MM/yyyy HH:mmなく、dd/MM/YYYY HH:mmなければなりません。

これで正常に動作します。

docs

Y年(hereから)年と週年の差の
Y週年

説明:

週年その年のすべての週が一週間である年です。 [...]これは、基本的に、1週間の データで作業するプログラムは、何年もの間に移行しないことを保証します。 [...]これはまた、今年の初めが1月1日に始まらないことを意味します。

+0

これは動作します。ありがとうございました。ドキュメントを読むことから、私は "週の年"が何であるか理解できませんでした。あなたは精巧に気遣いますか? – Auberon

+0

@Auberon説明を追加しました –

-1

これは、次のdataFormatで問題なく動作します。

SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm"); 
+0

それはあなた次第です。どのように日付形式のパターンを取るか。あなたの質問にデータフォーマットについて言及していないので、私は単に例を挙げました。常識を持ってください。 – SujitKumar

関連する問題