0

ここにこのコードがあります:

public static String AddRemoveDays(String date, int days) throws ParseException
    {
        SimpleDateFormat k = new SimpleDateFormat("yyyyMMdd");
        Date d = k.parse(date);
        d = new Date(d.getTime() + days*86400000);
        String time = k.format(d);

        return time;
    }

「yyyyMMdd」形式の文字列を取り、それに int 日を追加します。それは機能するはずです。日数が負の場合、彼は日付から日数を引きます。計算を行うと、「yyyyMMdd」形式の文字列を返します。

少なくともそれはすべきことです。小さい数値には機能しますが、たとえば年 (365 または -365) を追加 (または削除) しようとすると、奇妙な日付が返されます。

どうしたの?別の方法で完全に行う必要がありますか?

4

2 に答える 2

5
    d = new Date(d.getTime() + days*86400000);

86400000 に 365 整数を掛けると、それを保持できません。86400000 をロングに変更

    d = new Date(d.getTime() + days*86400000L);

そしてそれは大丈夫です。

于 2012-06-04T20:05:41.063 に答える
2

具体的な日付がなければ、何が起こっているのかを言うのは難しい.

生のJavaクラスでこれを行うことにコミットしている場合は、Calendar-egの使用を検討することをお勧めします

Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
calendar.add(Calendar.DATE, days); // this supports negative values for days;
d = calendar.getTime();

そうは言っても、JavaDateクラスを避けて、代わりにjodaTimeまたはjsr310を使用することをお勧めします。

DateTimeFormatterたとえば、jsr310 では、 andを使用できますLocalDate

DateTimeFormatter format = DateTimeFormatters.pattern("yyyyMMdd");
LocalDate orig = format.parse(dateString, LocalDate.rule());
LocalDate inc = orig.plusDays(days); // again, days can be negative;
return format.print(inc);
于 2012-06-04T20:06:07.913 に答える