2013-07-01 78 views
3

即時通訊字符串的值如String val = "2012-08-01T12:00",我用下面的代碼從它創建日曆類型,問題是當我打印的數據我得到的月07而不是08,如何可以我解決它以得到確切的一個月?問題以簡單的日期格式解析月份

1-7-2012-12-0-0

SimpleDateFormat parserSDF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm"); 
        Date date = null;    
        date = parserSDF.parse(Val); 
        Calendar cal = Calendar.getInstance(); 
       cal.setTime(date); 

System.out.println(cal.get(Calendar.DAY_OF_MONTH) + "-" + cal.get(Calendar.MONTH) + "-" 
         + cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.HOUR_OF_DAY) + "-" + cal.get(Calendar.MINUTE) 
         + "-" + cal.get(Calendar.SECOND)); 

回答

5

你的問題是在這裏:

cal.get(Calendar.MONTH) 

一月= 0(未 1),二月= 1(不是2)等

+0

是的我知道那麼我應該如何設置校準時間? –

+0

@JohnJerrby不要做cal.setTime()什麼,一個月按照慣例從0開始,你寧願做... +(cal.get(的Calendar.MONTH)+ 1)+ ...在你的System.out .println() – morgano

+0

有沒有辦法通過set方法來處理它,因爲我需要將其更新到一些API和這個API犯規添加一個到一個月,其間有一個辦法由一套方法以某種方式處理呢? –

1

month是基於0,所以你得到的是好的。

1

只需添加一個。

Calendarreturns the month in the range 0-11,因此增加1將它轉化爲1-12範圍內,我們都很熟悉。

上面鏈接引用的javadoc:

在格里高利曆和儒略曆中一年中的第一個月是 年1月起爲0

+0

如果我要處理它的設置方法,而不是在syso有一種方法可以做到這一點? –

1

月份是零在日曆索引。如果你想獲得一個索引一個月,你需要使用另一個SimpleDateFormatMM的格式。

所以,而不是你的怪String串聯的,你會使用

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss"); 
System.out.println(formatter.format(cal)); 
+0

你能否提供一個例子? –

+0

嗨鮑里斯這不是一個奇怪的字符串我需要它,因爲這是奧達塔日期時間格式...我無法改變它。 –

+0

'String'串聯**不是'Calendar'變成'String' **的方式。一個'日曆'具有數據的_internal_表示,並且**不應該與你有關**。您應該使用'SimpleDateFormat'將'Calendar'轉換爲'String'。 –