1

現在の月とトレースバックする月数の引数を入力し、これらすべてを日数に変換できるメソッドを作成しようとしています。たとえば、現在の月が 1 月で、過去 5 か月を日数に変換したい場合、答えは 153 になります。使用する次の情報があります。

    private Calendar cal;

    private int currentMonth;

    private final int JANUARY = 31;
    private final int FEBRUARY = 28;
    private final int MARCH = 31;
    private final int APRIL = 30;
    private final int MAY = 31;
    private final int JUNE = 30;
    private final int JULY = 31;
    private final int AUGUST = 31;
    private final int SEPTEMBER = 30;
    private final int OCTOBER = 31;
    private final int NOVEMBER = 30;
    private final int DECEMBER = 31;

    public Constructor(){
        cal = new GregorianCalendar();
        currentMonth = cal.get(Calendar.MONTH);
    }


    private int convertMonthsToDays(int currentMonth, int months){
        int days;
        return days;
}
4

4 に答える 4

2

すべてが Java であるのに、なぜ独自のアルゴリズムを作成するのか。

現在と 5 か月前のミリ秒を計算するだけです。

    long now = System.currentTimeMillis();

    Calendar calendar = GregorianCalendar.getInstance();
    //Here I set the calendar to now. But you can set the date you want.
    // by using the method  calendar.set()
    calendar.setTimeInMillis(now);
    calendar.add(Calendar.MONTH, -5);
    long previous = calendar.getTimeInMillis();

    int numberOfDays =(int)( (now - previous) / (1000* 3600 *24));

それが助けになることを願っています。

よろしく。

于 2012-04-10T02:16:08.573 に答える
2

あなたが望むもののためにこのコードを使用してください

package test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.GregorianCalendar;
import com.mPower.fw.dao.ClassMaster;
import com.mPower.fw.impl.DaoServiceIMPL;
import com.mPower.fw.util.hibernateUtil;

public class runT {

    public static void main(String[] args) throws IOException {
        try{
            Calendar calendar = new GregorianCalendar();
            int CURRENT_MONTH = 0;
            int MONTH_BACK = 5;

            int totalDays = 0;

        calendar.set(Calendar.MONTH, CURRENT_MONTH);

            for(int i=0;i<MONTH_BACK;i++){
                totalDays += calendar.getMaximum(java.util.Calendar.DAY_OF_MONTH);
                calendar.add(Calendar.MONTH, -1);
            }

            System.out.println(totalDays);

        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

calendar.add(Calendar.MONTH, -1 );を使用します。1 か月前に。

calendar.add(Calendar.MONTH, 1 );を使用します。1 か月先まで。

于 2012-04-10T02:16:47.407 に答える
0

この実装の主な問題は、現在の年ではなく 2000 年に固定されていることです。

private int convertMonthsToDays(int currentMonth, int months){
    int days = 0;

    for (int iter=0; iter < months; iter++)
    {
      currentMonth = (currentMonth - iter) % 12;
      this.cal.set(2000, currentMonth, 1);
      days = days + this.cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    }

    return days;
}
于 2012-04-10T02:06:41.473 に答える
0

SimpleDateFormat の使用が許可されているかどうかはわかりませんが、IMO の非常に簡単な例を次に示します。コミュニティがそれについてどう感じているかはわかりませんが、うまくいきます:

private static SimpleDateFormat monthNumberFormat = new SimpleDateFormat("M");
private static SimpleDateFormat daysOfYearFormat = new SimpleDateFormat("DDD");

private static int convertMonthsToDays(int currentMonth, int months){
    try {
        Date startingDate = monthNumberFormat.parse(currentMonth + "");
        Date endingDate = monthNumberFormat.parse(currentMonth - months + "");
        return Integer.parseInt(daysOfYearFormat.format(startingDate)) - 
                Integer.parseInt(daysOfYearFormat.format(endingDate));
    } catch (ParseException e) {
        return -1;
    } catch (NumberFormatException nfe){
        return -1;
    }
}   

ここでは、有効なパラメーターを渡しているかどうかを確認するチェックは行われません。また、1 年以上遡ることも考慮されていません。

このメソッドを使用すると、希望する月の数とさかのぼる月の数を渡すことができ、日数の差が得られます。

于 2012-04-10T03:13:01.230 に答える