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();
也就是说,我建议不要使用javaDate
类,而是使用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天
。