조 :
TimeUnit.DAYS.convert(
Math.abs(
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("30-03-2020 00:00:00").getTime() -
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("1-03-2020 00:00:00").getTime()
),
TimeUnit.MILLISECONDS)
결과는 28이며 29 시간대 / 위치가 문제가 될 수 있어야한다?
안드레아스 :
문제는 (2020년 3월 8일 (일요일)에) 일광 절약 시간 이동의 존재 때문이다 이십팔일 및 23시간 그 날짜 사이. TimeUnit.DAYS.convert(...)
절단 이십팔일 그 결과를.
문제를 (I 미국 동부 시간대에있어)를 참조하십시오 :
SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
long diff = fmt.parse("30-03-2020 00:00:00").getTime() -
fmt.parse("1-03-2020 00:00:00").getTime();
System.out.println(diff);
System.out.println("Days: " + TimeUnit.DAYS.convert(Math.abs(diff), TimeUnit.MILLISECONDS));
System.out.println("Hours: " + TimeUnit.HOURS.convert(Math.abs(diff), TimeUnit.MILLISECONDS));
System.out.println("Days: " + TimeUnit.HOURS.convert(Math.abs(diff), TimeUnit.MILLISECONDS) / 24.0);
산출
2502000000
Days: 28
Hours: 695
Days: 28.958333333333332
해결하려면, DST가없는 시간대를 사용, 예를 들어, UTC :
SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
fmt.setTimeZone(TimeZone.getTimeZone("UTC"));
long diff = fmt.parse("30-03-2020 00:00:00").getTime() -
fmt.parse("1-03-2020 00:00:00").getTime();
산출
2505600000
Days: 29
Hours: 696
Days: 29.0