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 更改为 Long

    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类,而是改用jodaTimejsr310

例如在 jsr310 中,您可以使用DateTimeFormatterand 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 回答