Dapatkan jumlah bulan antara tanggal dan hari ini di JAVA [duplikat]

Saya mencoba mendapatkan jumlah bulan antara tanggal tertentu dalam format String (31-05-2019), dikirim sebagai parameter, dan hari ini: 13-07-2020. Dalam contoh ini akan menjadi 13 bulan.

Saya ingin memasukkan jawabannya ke dalam variabel int.

Apakah ada cara mudah untuk melakukannya?

Terima kasih banyak!


person Rebi Khalifa    schedule 14.07.2020    source sumber
comment
@Niroshan Kelas Date yang buruk telah digantikan beberapa tahun yang lalu oleh kelas java.time modern beberapa tahun yang lalu dengan penerapan JSR 310. Menyarankan penggunaannya pada tahun 2020 adalah saran yang buruk.   -  person Basil Bourque    schedule 14.07.2020
comment
Ini sepertinya tidak diteliti dengan baik? Ada beberapa pertanyaan serupa, misalnya Perbedaan Tanggal Bulan Java. Jawaban dari Kuchi ini mungkin sangat membantu.   -  person Ole V.V.    schedule 14.07.2020


Jawaban (3)


Sejak Java 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
person Marc    schedule 14.07.2020
comment
wow terima kasih banyak...tidak tahu itu sesederhana itu :D - person Rebi Khalifa; 14.07.2020
comment
Meskipun sangat kecil kemungkinannya bahwa hasilnya tidak sesuai dengan int, menurut saya yang terbaik adalah memeriksa asumsi bahwa hasilnya sesuai. Gunakan Math.toIntExact(Period.between(myDate,today).toTotalMonths()). - person Ole V.V.; 14.07.2020

java.waktu

Gunakan kelas java.time.

Metode Period::toTotalMonths mengembalikan long untuk jumlah bulan yang telah berlalu sepanjang rentang waktu.

Anda meminta int daripada long. Daripada memberikan long itu ke int yang Anda inginkan, hubungi Math.toIntExact. Metode ini memberikan pengecualian jika penyempitan yang dihasilkan dari gips meluap.

int months =
    Math.toIntExact(
        Period.between
        (
            LocalDate.parse( "2019-05-31" ) ,
            LocalDate.now( ZoneId.of( "Africa/Tunis" ) )
        )
        .toTotalMonths()
    )
;
person Basil Bourque    schedule 14.07.2020

Anda dapat menggunakan pendekatan berikut

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);

    }
}

person Prashanth D    schedule 14.07.2020
comment
Tidak perlu menentukan pola pemformatan khusus untuk format standar ISO 8601. Bawaan. - person Basil Bourque; 14.07.2020