2017-05-17 38 views
0

我已閱讀了大量過去的文章,看來我正確地做了所有事情,但日曆由於某種原因錯誤地解析了字符串。本質上,我正在接受輸入日期並將其解析爲日曆日期。 println語句是爲了錯誤測試。將文本解析爲日曆日期的錯誤

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-YYYY"); 
Calendar wholeDate = new GregorianCalendar(); 

System.out.println(txtMmddyyyy.getText()); 
System.out.println(wholeDate.MONTH + " " + wholeDate.DAY_OF_MONTH + " " + wholeDate.YEAR); 

try { 
    wholeDate.setTime(sdf.parse(txtMmddyyyy.getText())); 
} catch (ParseException e3) { 
    System.out.println("Failure"); 
    e3.printStackTrace(); 
} 

System.out.println(wholeDate.MONTH + " " + wholeDate.DAY_OF_MONTH + " " + wholeDate.YEAR); 

當我輸入 「2017年5月15日」

-The第一打印語句返回 「17年5月15日」

-The第二打印語句返回 「2 5 1」

- 第三個打印語句返回「2 5 1」

我很困惑,想知道是否有人知道可能發生了什麼。謝謝。

+1

你混淆了常量MONTH等與他們如何使用;你認爲這是一個月,但這只是一個常數,用於檢索月份。看看Javadocs。 –

回答

1

日曆月開始在0你會得到前一個月

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy"); 
Calendar wholeDate = new GregorianCalendar(); 

System.out.println(txtMmddyyyy.getText()); 
System.out.println(wholeDate.get(Calendar.MONTH) + " " + wholeDate.get(Calendar.DAY_OF_MONTH) + " " + wholeDate.get(Calendar.YEAR)); 

try { 
    wholeDate.setTime(sdf.parse(txtMmddyyyy.getText())); 
} catch (ParseException e3) { 
    System.out.println("Failure"); 
    e3.printStackTrace(); 
} 

System.out.println(wholeDate.get(Calendar.MONTH) + " " + wholeDate.get(Calendar.DAY_OF_MONTH) + " " + wholeDate.get(Calendar.YEAR)); 
3

MONTH,DAY_OF_MONTHYEAR是常量,它們不反映Calendar的狀態,但爲您提供了一種與其交互的方法。我強烈建議您花時間閱讀JavaDocs以更好地瞭解這些字段的用途以及如何使用它們。

但是,鑑於Calendar有效過時了,我強烈建議你花你的時間,而是在學習新的日期/時間類投資 - 見Date and Time Classes更多細節