2016-10-26 10 views
0

入力日は2016-01-01ですが、出力には2016/02/01が表示されるのはなぜですか?カレンダー機能

String df = "2016-01-01"; 
String enddate=""; 
SimpleDateFormat DATE_FORMAT_QUERY = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'"); 

Calendar cal=Calendar.getInstance(); 
String[] dateStr=df.split("-"); 
int year=Integer.parseInt(dateStr[0]); 
int month=Integer.parseInt(dateStr[1]); 
int day=Integer.parseInt(dateStr[2]); 
cal.set(year,month,day,23, 59,59); 
System.out.println(cal.getTime()); 
enddate=DATE_FORMAT_QUERY.format(cal.getTime()); 
System.out.println(enddate); 

出力:

Mon Feb 01 23:59:59 EST 2016 20160201T235959Z 
+2

? – Thomas

答えて

2

ANSWER質問に対する

入力日付は2016年1月1日ですが、なぜ出力は、2016年2月1日を示しますか?

Calendar::monthは0ベースであるためです。

monthからMONTHカレンダフィールドの設定に使用する値。 月の値は0から始まります。たとえば1月は0です。

あなたはSimpleDateFormatを使用して手動でDate、良くなる日を含むStringを解析しないとCalendarを設定するためにそれを使用NEVER

int month=Integer.parseInt(dateStr[1] - 1); 

正解

を使用する必要があります時間:

SimpleDateFormat dfo = new SimpleDateFormat("yyyy-MM-dd"); 
Calendar cal=Calendar.getInstance(); 
cal.setTime(dfo.parse("2016-01-01")); 

OUTPUT:あなたの代わりにすることを自分で行うのと同様の入力日付を解析し、 `SimpleDateFormat`を使用していないのはなぜ

Fri Jan 01 00:00:00 CET 2016 
20160101T000000Z 
+0

清算のお礼ありがとうございます –

+0

お返事ありがとうございました ';)' –

+1

@PanayappanSwaminathan限り[あなたの質問に答えを受け入れることはできません](http://stackoverflow.com/users/5168236/panayappan-swaminathan?tab=questions)この回答または任意の回答があなたの質問を解決したかどうかを知る必要があります。チェックマークをクリックして[受諾](http://meta.stackexchange.com/q/5234/179419)を検討してください。これは、あなたが解決策を見つけ出し、回答者とあなた自身の両方に評判を与えていることを広範なコミュニティに示します。もちろんこれを行う義務はありません。 –

関連する問題