由于某种原因,这将输出大约16348的数值。当第一个和最后一个日期值分别为0110和0201时。为什么我没有得到一天的价值?
import java.util.Scanner;
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
public class Project3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String firstDate = input.next(), lastDate = input.next();
try {
Date date1 = new SimpleDateFormat("MMdd").parse(firstDate);
Date date2 = new SimpleDateFormat("MMdd").parse(lastDate);
System.out.println(Project3.days(date1, date2));
} catch (Exception e) {
//
}
}
public static long days(Date startDate, Date endDate) {
Calendar start = Calendar.getInstance();
start.setTime(startDate);
Calendar end = Calendar.getInstance();
long daysBetween = 0;
while(start.before(end)) {
start.add(Calendar.DAY_OF_MONTH, 1);
daysBetween++;
}
return daysBetween;
}
}
答案 0 :(得分:3)
您忘记在end
上致电Calendar.setTime(Date)
,
Calendar end = Calendar.getInstance();
end.setTime(endDate); // <-- like so.
答案 1 :(得分:0)
ChronoUnit.DAYS.between(
MonthDay.parse( "0110" , DateTimeFormatter.ofPattern( "MMdd" ) ).atYear( 2017 ) ,
MonthDay.parse( "0201" , DateTimeFormatter.ofPattern( "MMdd" ) ).atYear( 2017 )
)
如果可能,请更改文本格式以符合ISO 8601标准。月日格式为--MM-DD,例如1月10日的--01-10
。
MonthDay
使用MonthDay
课程代表一个月日。
MonthDay md1 = MonthDay.parse( "--01-10" );
MonthDay md2 = MonthDay.pares( "--02-01" );
MonthDay md = MonthDay.parse(
"0110" ,
DateTimeFormatter.ofPattern( "MMdd" )
)
LocalDate
要计算天数,您必须申请一年。由于闰年和2月29日,我们无法在没有一年背景的情况下准确计算经过的天数。
LocalDate ld1 = md1.atYear( 2017 );
LocalDate ld2 = md2.atYear( 2017 );
ChronoUnit
使用ChronoUnit
获取已用时间。
long days = ChronoUnit.DAYS.between( ld1 , ld2 );
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。