Java 添加/删除所需日期代码修复后的天数

Java 添加/删除所需日期代码修复后的天数,java,Java,我这里有这个代码: 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);

我这里有这个代码:

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),它将返回wierd日期

有什么问题吗? 我应该完全换一种方式吗

    d = new Date(d.getTime() + days*86400000);
如果你用86400000乘以365整数,你就不能保持它。将86400000更改为Long

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

而且会很好的。

如果没有具体的日期,很难说发生了什么

如果您致力于使用原始Java类来实现这一点,那么您可能想看看如何使用
Calendar
——例如

Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
calendar.add(Calendar.DATE, days); // this supports negative values for days;
d = calendar.getTime();
也就是说,我建议不要使用java
Date
类,而是使用or

e、 g.在jsr310中,可以使用
DateTimeFormatter
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);

“奇怪的约会”是什么意思?请注意,添加365天不一定与添加年份相同(请参阅:步骤年份)。您能提供有问题的日期吗?你测试的日期是什么?不是每年都有365天,不要忘记闰年(2012年是)。另外,我建议使用
Calendar
类,因为
Date
现在在较新的Java中已被弃用。一个有用的方法是
Calendar.getActualMaximum()
,它将根据当前年份是否为闰年返回一年中正确的天数。另外,
Calendar
的内部数学功能更为智能,当你增加日期时,它会滚动不同的值。我知道不是,这只是一个例子,这就是为什么我用毫秒计算的原因。尝试参数(“20120605”,365)或(“20120605”,45)。我怎么能用日历呢?@gnomed:你在哪里看到那个日期被否决了?不是。而且也没有SimpleCalendarFormat。@JBNizet True,整个类并没有被弃用,但其中几乎每个方法都是:它仅用于毫秒时间戳的轻量级包装,主要用于SQL(JDBC)兼容性目的。它也可以用作
SimpleDateFormat
(或任何其他日期格式)和
日历
之间的过渡结构。虽然
Date
可以表示时间,但是
Calendar
更适合处理日期/时间。谢谢,现在它可以工作了。我现在可以添加/删除数千年了!=)虽然OP可能应该使用更准确的东西(如Joda时间或日历),但这个答案完全符合他的要求+1@Karlovsky120 -- 86400000 * 1000 != 1000年。@ChrisCashwell你什么意思?86400000 * 1000 != 1000年前,因为这个方法增加了1000天而不是1000年。@Pshemo感谢您指出。。。我的意思是
86400000*1000!=1000天