2011-07-13 108 views
6

我有个约会String newDate = "31.05.2001"1天递增日期字符串

我必须增加1天。

我尝试下面的代码:

String dateToIncr = "31.12.2001"; 
String dt=""; 
SimpleDateFormat sdf = new SimpleDateFormat("dd.mm.yyyy"); 
Calendar c = Calendar.getInstance(); 
try { 
    c.setTime(sdf.parse(dateToIncr)); 
} catch (ParseException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
c.add(Calendar.DAY_OF_MONTH, 1); // number of days to add 
dt = sdf.format(c.getTime()); 
System.out.println("final date now : " + dt); 

但有了这个代码,它只是设法增加2001年5月31日的第一天即输出将是2001年1月5日保持月份和年份不变!请帮我解决一下这个。

我也试过

c.roll(Calendar.DATE, 1); // number of days to add 
+0

Err,'Calendar.add()'应该工作。你确定你的投入和产出吗? – Henning

+2

这就是为什么字符串不好厨房水槽 –

+0

我试过的代码 - 它的行为如上所述... Wierd?! –

回答

12

您应该使用new SimpleDateFormat("dd.MM.yyyy");

'毫米' 是指分钟, 'MM' 是月。

+1

+1啊!明显。很好的发现。 – Henning

+0

我想出来了!非常感谢Fortega! :) – Alpesh003

2

您的错误是日期格式。您应该使用MM(月)而不是mm(分钟)。

SimpleDateFormat sdf = new SimpleDateFormat("dd.mm.yyyy");更改为SimpleDateFormat sdf = new SimpleDateFormat(“dd.MM.yyyy”);

并享受。

2

试试这个!!!!

String DATE_FORMAT = "dd-MM-yyyy"; 
    String date_string = "20-12-2001"; 
    java.text.SimpleDateFormat sdf = 
    new java.text.SimpleDateFormat(DATE_FORMAT); 
    Date date = (Date)sdf.parse(date_string); 
    Calendar c1 = Calendar.getInstance(); 
    c1.setTime(date); 
    System.out.println("Date is : " + sdf.format(c1.getTime())); 
    c1.add(Calendar.MONTH,1); 
    System.out.println("Date + 1 month is : " + sdf.format(c1.getTime())); 
3

这将是简单的,你把它做成一个java Date对象,并对其使用DateUtils来自Apache的进行各种操作。检查这个http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/time/DateUtils.html。当你不得不在你的项目中使用它多个地方,并且不希望每次都写出荒谬的行数时,它非常方便。

的API说:

addDays(日期日期,INT量):增加的天数为日期返回一个新的对象。

请注意,它会返回一个新的Date对象,并且不会更改前一个对象本身。