Java 获取当前月份中的天数

Java 获取当前月份中的天数,java,sql,java.util.calendar,Java,Sql,Java.util.calendar,我希望按如下方式显示arraylist: [2013-11-01,2013-11-8,2013-11-15,2013-11-22,2013-11-29] 我编写了以下代码,并将静态值传递给该方法: import java.sql.Date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; impo

我希望按如下方式显示arraylist:

[2013-11-01,2013-11-8,2013-11-15,2013-11-22,2013-11-29]
我编写了以下代码,并将静态值传递给该方法:

import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

import java.util.List;


public class DateExample {


     Calendar cal = Calendar.getInstance();


    public static void main(String[] args) {



        DateExample date=new DateExample();
        date.getAllDaysInaMonth("2013",11,1);

    }

    public  List<java.sql.Date> getAllDaysInaMonth(String year,int month,int day){
        System.out.println(year+""+month+""+day);

        cal.set(Calendar.DAY_OF_MONTH, 1); 

        int utilyear=cal.get(cal.YEAR);
        String syear=   Integer.toString(utilyear);
        int utilmonth=cal.get(cal.MONTH);
        int utilday=cal.get(cal.DAY_OF_MONTH);



        List<java.sql.Date> arraylist=new ArrayList<java.sql.Date>();
        while (month==cal.get(Calendar.MONTH)) {
             System.out.println("while"+cal.getTime());

              SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
                String dateofutil=format.format(cal.getTime());
                System.out.println("dateofutil"+dateofutil);
                try {
                    java.sql.Date sqldate=new java.sql.Date(format.parse(dateofutil).getTime());
                    arraylist.add(sqldate);


                } catch (ParseException e) {

                    e.printStackTrace();
                }

           cal.add(Calendar.DAY_OF_MONTH,1);

                }
         System.out.println("arraylist values"+arraylist);
        return arraylist;
    }





}
import java.sql.Date;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Calendar;
导入java.util.List;
公共类示例{
Calendar cal=Calendar.getInstance();
公共静态void main(字符串[]args){
DateExample date=新的DateExample();
日期:getAllDaysInaMonth(“2013”,11,1);
}
公共列表getAllDaysInaMonth(字符串年、整数月、整数天){
系统输出打印项次(年+月+日);
校准设置(日历日/月/日,1);
int utilyear=cal.get(cal.YEAR);
字符串syear=Integer.toString(utilyear);
int utilmonth=cal.get(cal.MONTH);
int utilday=cal.get(每月的cal.DAY);
List arraylist=新建arraylist();
while(month==cal.get(Calendar.month)){
System.out.println(“while”+cal.getTime());
SimpleDateFormat=新的SimpleDateFormat(“yyyy-MM-dd”);
字符串dateofutil=format.format(cal.getTime());
System.out.println(“dateofutil”+dateofutil);
试一试{
java.sql.Date sqldate=new java.sql.Date(format.parse(dateofutil.getTime());
arraylist.add(sqldate);
}捕获(解析异常){
e、 printStackTrace();
}
cal.add(日历日/月,1);
}
System.out.println(“arraylist值”+arraylist);
返回数组列表;
}
}
这里,我将静态年、月、日期作为参数传递给方法,通过该参数值,我将打印日期,如
yyy-MM-dd
格式,当我超过1天时,然后打印7天后的日期
但是上面的代码工作不正常请给我正确的代码这里有两件事需要更改

首先,

while (month==cal.get(Calendar.MONTH)) {
需要改成

while (month==cal.get(Calendar.MONTH)+1) {
因为根据

在公历和儒略历中,一年的第一个月是1月,即0

第二件事是将
ArrayList
类型设置为
String
,而不是
Date
,因为
Date
没有格式。您只能获取它的格式化字符串表示形式

List<String> arraylist = new ArrayList<String>();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); // This can go out of the `while` loop though.
String dateofutil = format.format(cal.getTime());
arraylist.add(dateofutil);
List arraylist=new arraylist();
SimpleDataFormat=新的SimpleDataFormat(“yyyy-MM-dd”);//但这可能会超出“while”循环。
字符串dateofutil=format.format(cal.getTime());
arraylist.add(dateofutil);

您需要进行以下更改:

更多信息请参见Calendar.class=>11月,
是10,而不是11
。这就是为什么以前你没有得到预期的结果。改变它,然后继续

public final static int NOVEMBER = 10;

/**
 * Value of the {@link #MONTH} field indicating the
 * twelfth month of the year.
 */
public final static int DECEMBER = 11;

/**
 * Value of the {@link #MONTH} field indicating the
 * thirteenth month of the year. Although <code>GregorianCalendar</code>
 * does not use this value, lunar calendars do.
 */
public final static int UNDECIMBER = 12;
和都是正确的


这种日期时间工作在使用图书馆时要容易得多

首先,与java.util.Calendar中基于零的愚蠢不同,Joda时间从一开始计算。所以一周的天数是1-7天,一年的月份是1-12天

下面是一些使用JodaTime2.3和Java7的示例代码

/©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
//导入org.joda.time.*;
//导入org.joda.time.format.*;
//传递到方法中的数据。
国际年=2014年;
整月=2;
整日=2;
java.util.List dateTimes=new ArrayList();
DateTime开始=新的日期时间(年、月、日、0、0);
DateTime DateTime=开始;
while(dateTime.monthOfYear().equals(start.monthOfYear())){
dateTimes.add(dateTime);//收集每个日期时间对象。
dateTime=dateTime.plusDays(7);
}
System.out.println(“列表:+dateTimes”);
用于(日期时间项:日期时间){
System.out.println(ISODateTimeFormat.date().print(item));
}
当运行时

列表:[2014-02-02T00:00:00.000-08:002014-02-09T00:00:00.000-08:002014-02-16T00:00:00.000-08:002014-02-23T00:00.000-08:00]
2014-02-02
2014-02-09
2014-02-16
2014-02-23

就我个人而言,我更喜欢保留
日期的数组,然后只在实际打印时格式化它。
while ((month-1)==cal.get(Calendar.MONTH)) {
public final static int NOVEMBER = 10;

/**
 * Value of the {@link #MONTH} field indicating the
 * twelfth month of the year.
 */
public final static int DECEMBER = 11;

/**
 * Value of the {@link #MONTH} field indicating the
 * thirteenth month of the year. Although <code>GregorianCalendar</code>
 * does not use this value, lunar calendars do.
 */
public final static int UNDECIMBER = 12;