Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从日历中获取自定义月日_Java_Date - Fatal编程技术网

Java 从日历中获取自定义月日

Java 从日历中获取自定义月日,java,date,Java,Date,我想得到一个月中的某一天,从这个字段中减去天数 注意:日期是自定义选择的,如2012-09-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, -

我想得到一个月中的某一天,从这个字段中减去天数

注意:日期是自定义选择的,如2012-09-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/u/u-MONTH),-5)

上面的语句实际上会出错,说的是
IllegalArgumentException
,但在我输出它时会打印正确的值

calendar.DAY\u OF\u MONTH
无法打印d2中的正确日期。如果我做错了什么,或者这不是正确的方法,我会感到困惑

更新

这就是我的代码中所包含的内容。我想要任何日期范围的数组。假设用户已将结束日期设置为
d2中的“2012-8-20”
。我希望数组中包含过去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;
}
第一个参数应该是字段的类型

例如:

csd.add(Calendar.DAY_OF_MONTH, -5)
就你而言:

calendarEndDate.get(Calendar.DAY_OF_MONTH) 
返回月份的日期,但
日历
需要修改哪些字段

请参考日历API

编辑:

calendar.add(calendar.DAY_OF_MONTH, -5);
int dayofMonth = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(dayofMont);
它确实对我有用

        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
更新

        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]);
        }

我希望你有所有你需要了解这是如何工作的,祝你好运,伙计

您是否可以编辑以提供说明问题的可运行示例,以及示例输入和预期输出?
calendarEndDate
在何处/如何定义?为什么要创建两个不同的日历?为什么
d1
相关?@DNA。我只是复制了代码。在本例中我没有使用d1,但我的代码中有它用于其他目的。csd.add(calendar.get(calendar.DAY/u/u MONTH),-5);Calendar.DAY\u OF \u MONTH不是有效参数。
Calendar.DAY\u OF \u MONTH
将打印错误的值。我将日期设置为2012-10-22,当我尝试系统输出时,它会打印值5。当选择自定义日期或我需要在代码中进行哪些更改时,您能否帮助我获得正确答案?Calendar.DAY\u OF_MONTH是常量,它指示您要在Calendar中获取或设置哪个字段。要获取月日,您需要编写:csd.get(Calendar.day\u of\u month)。如果你想减去5天,你可以写csd.add(Calendar.DAY\u OF\u MONTH,-5);就像@Nambari所说的,使用calendarEndDate.get(Calendar.DAY/u/u MONTH)。每月的第天是日历中的最终静态字段,它将始终返回5。追随detail@user525146:我认为您不必要地使用两个日历对象。如果要设置日期,请添加csd.setTime(d2)
        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]);
        }