2012-10-23 123 views
-2

我想让月中的某一天实际上从该字段中减去天数。从日历中获取自定义的月份日期

注:这一天是定制选择,比如2012年9月10日

Date d2 = new SimpleDateFormat("yyyy-M-dd").parse("2012-10-24); 

Calendar calendar= Calendar.getInstance(); 
Calendar csd= Calendar.getInstance(); 
calendar.setTime(d2); 

csd.add(calendar.DAY_OF_MONTH, -5); 

csd.add(calendar.get(Calendar.DAY_OF_MONTH),-5)

的上面实际上会出错说出IllegalArgumentException,但是当我将其系统打印出来时打印出正确的值

calendar.DAY_OF_MONTH不会打印出在d2中的正确日期。如果我做错了什么,或者这不是正确的方法,我很困惑?

UPDATE

这是我在我的代码有什么。我想要任何日期范围的数组。假设用户已将结束日期设置为"2012-8-20",这在d2中。我想在一个数组中使用30天的日期值,该代码不起作用。

for(int count = 30; count >=1; count--) { 
    Calendar csd = Calendar.getInstance(); 
    csd.add(calendar.DAY_OF_MONTH, -count); 
    String dt = (csd.get(Calendar.YEAR)) + "-" + (csd.get(Calendar.MONTH)+1) + "-" + (csd.get(Calendar.DATE)); 
    aDays[30 - count] = dt; 
} 
+0

你可以编辑提供一个可运行的例子,说明问题,样本输入和预期的输出?在哪里/如何定义“calendarEndDate”?你为什么创建两个不同的日历?为什么“d1”相关? – DNA

+0

@DNA。我刚刚复制了代码。在这种情况下,我不使用d1,但是为了其他目的,我在代码中使用了它。 – user525146

+0

csd.add(calendar.get(Calendar.DAY_OF_MONTH),-5); Calendar.DAY_OF_MONTH不是有效的参数。 – PbxMan

回答

1

它确实为我工作。

 Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String)"2012-10-24"); 

     Calendar calendar= Calendar.getInstance(); 
     Calendar csd= Calendar.getInstance(); 
     calendar.setTime(d2); 
     calendar.add(calendar.DAY_OF_MONTH, -5);   
     System.out.println(new Date(calendar.getTimeInMillis())); 
     csd.add(csd.DAY_OF_MONTH, -5);  
     System.out.println(new Date(csd.getTimeInMillis()));  


csd.add(calendar.get(Calendar.DAY_OF_MONTH), -5);//wrong is giving an invalid argument 

UPDATE

 String[] aDays = new String[30]; 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd"); 
     for (int count = 30; count >= 1; count--) { 
      Calendar csd = Calendar.getInstance(); 
      csd.add(Calendar.DAY_OF_MONTH, -count); 
      aDays[30 - count] = (sdf.format(new Date(csd.getTimeInMillis())));  
     } 

     //to double check it 
     for (int count = 30; count >= 1; count--) { 
      System.out.println(aDays[30 - count]); 
     } 

我希望你有你需要理解它是如何工作的,运气好伴侣!

+0

请检查更新 – user525146

+0

如果您想设置日期,请添加csd.setTime(d2) – PbxMan

2
csd.add(calendarEndDate.get(Calendar.DAY_OF_MONTH), -5) 

第一参数应该是场的类型。

例子:

csd.add(Calendar.DAY_OF_MONTH, -5) 

你的情况:

calendarEndDate.get(Calendar.DAY_OF_MONTH) 

返回月份的一天,但Calendar预计有哪些申请需要进行修改。

请参阅日历API documentation

编辑:

calendar.add(calendar.DAY_OF_MONTH, -5); 
int dayofMonth = calendar.get(Calendar.DAY_OF_MONTH); 
System.out.println(dayofMont); 
+0

'Calendar.DAY_OF_MONTH'会打印错误的值。我将日期设置为2012-10-22,当我试图将其系统输出时,打印出值为5 – user525146

+0

当您选择自定义日期或需要在代码中进行哪些更改时,能否帮助我获得正确答案? – user525146

+0

Calendar.DAY_OF_MONTH是常量,它指示您想要在日历中获取或设置哪个字段。要获取月份的日期,请写下:csd.get(Calendar.DAY_OF_MONTH)。如果你想减去5天,你写csd.add(Calendar.DAY_OF_MONTH,-5); – jjczopek

相关问题