0

次のように配列リストを表示したい:

[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;
    }





}

ここでは、静的な年、月、日付をメソッドにパラメーターとして渡しています。その値は、yyyy-MM-dd1日を渡し、7日後に日付が印刷されると、フォーマットのような日付を印刷しますが、上記のコードは正しく機能していません正しいコードを教えてください

4

3 に答える 3

1

ここで変更する点が 2 つあります。

初め、

while (month==cal.get(Calendar.MONTH)) {

に変更する必要があります

while (month==cal.get(Calendar.MONTH)+1) {

ドキュメントによると

グレゴリオ暦とユリウス暦の年の最初の月は 1 月で、これは 0 です。

2 つ目は、 には形式がないため、ではなくArrayListof 型を作成することです。フォーマットされた文字列表現のみを取得できます。StringDateDate

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);
于 2013-11-20T10:46:04.483 に答える
0

RJ回答と MouseLearnJavaの回答はどちらも正しいです。


Joda-Timeライブラリを使用すると、この種の日時処理がはるかに簡単になります。

1 つには、Joda-Time は、java.util.Calendar のゼロベースの愚かさとは異なり、1 から数えます。したがって、曜日は 1 ~ 7、月は 1 ~ 12 です。

Joda-Time 2.3 と Java 7 を使用したサンプル コードを次に示します。

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

// Data passed into method.
int year = 2014;
int month = 2;
int day = 2;

java.util.List<DateTime> dateTimes = new ArrayList<DateTime>();
DateTime start = new DateTime( year, month, day, 0, 0, 0 );
DateTime dateTime = start;

while( dateTime.monthOfYear().equals( start.monthOfYear() ) ) {
    dateTimes.add( dateTime ); // Collect each date-time object.
    dateTime = dateTime.plusDays( 7 );
}

System.out.println( "The list: " + dateTimes );

for( DateTime item : dateTimes ){
    System.out.println( ISODateTimeFormat.date().print( item ) );
}

実行すると…</p>

The list: [2014-02-02T00:00:00.000-08:00, 2014-02-09T00:00:00.000-08:00, 2014-02-16T00:00:00.000-08:00, 2014-02-23T00:00:00.000-08:00]
2014-02-02
2014-02-09
2014-02-16
2014-02-23
于 2014-01-06T23:45:44.013 に答える