ฉันกำลังพยายามรับจำนวนเดือนระหว่างวันที่ที่กำหนดในรูปแบบ String (31-05-2562) ส่งเป็นพารามิเตอร์และวันนี้ : 2020-07-13 ในตัวอย่างนี้จะเป็น 13 เดือน
ฉันต้องการใส่คำตอบลงในตัวแปร int
มีวิธีง่าย ๆ ในการทำหรือไม่?
ขอบคุณมาก!
ฉันกำลังพยายามรับจำนวนเดือนระหว่างวันที่ที่กำหนดในรูปแบบ String (31-05-2562) ส่งเป็นพารามิเตอร์และวันนี้ : 2020-07-13 ในตัวอย่างนี้จะเป็น 13 เดือน
ฉันต้องการใส่คำตอบลงในตัวแปร int
มีวิธีง่าย ๆ ในการทำหรือไม่?
ขอบคุณมาก!
ตั้งแต่จาวา 1.8:
LocalDate today = LocalDate.now();
LocalDate myDate = LocalDate.parse("2019-05-31");
int months = (int) Period.between(myDate,today).toTotalMonths();
System.out.println(months); // output: 13
int
ไม่น่าจะเป็นไปได้มากนัก แต่ฉันพบว่าวิธีที่ดีที่สุดคือตรวจสอบสมมติฐานว่าเป็นเช่นนั้น ใช้ Math.toIntExact(Period.between(myDate,today).toTotalMonths())
- person Ole V.V.; 14.07.2020
ใช้คลาส java.time
เมธอด Period::toTotalMonths
ส่งคืน long
สำหรับจำนวนเดือนที่ผ่านไปตลอดช่วงเวลา
คุณขอ int
แทนที่จะเป็น long
แทนที่จะโยน long
ไปยัง int
ที่คุณต้องการ ให้โทร Math.toIntExact
วิธีนี้จะทำให้เกิดข้อยกเว้นหากผลลัพธ์ที่แคบลงจากการโอเวอร์โฟลว์แบบหล่อ
int months =
Math.toIntExact(
Period.between
(
LocalDate.parse( "2019-05-31" ) ,
LocalDate.now( ZoneId.of( "Africa/Tunis" ) )
)
.toTotalMonths()
)
;
คุณสามารถใช้แนวทางต่อไปนี้
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class DateUtil{
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String date = "2019-05-31";
LocalDate localDate = LocalDate.parse(date, formatter);
LocalDate now = LocalDate.now();
long diff = ChronoUnit.MONTHS.between(localDate, now);
System.out.println(diff);
}
}
Date
คลาสที่แย่มากทั้งคู่ถูกแทนที่เมื่อหลายปีก่อนโดยคลาส java.time สมัยใหม่เมื่อหลายปีก่อนด้วยการนำ JSR 310 มาใช้ การแนะนำการใช้งานในปี 2020 ถือเป็นคำแนะนำที่ไม่ดี - person Basil Bourque   schedule 14.07.2020