用JDK特有的时间类求解

先构建原型 再解析

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        long n= sc.nextLong();
        for (long i = 0; i < n; i++) {
            String arr[]=sc.next().split("-");
            //一个人在2月29日出生则没有18岁生日
            if(Integer.parseInt(arr[1])==2&&Integer.parseInt(arr[2])==29){
                System.out.println("-1");
                continue;
            }
            LocalDate birthday = LocalDate.of(Integer.parseInt(arr[0]),Integer.parseInt(arr[1]) ,Integer.parseInt(arr[1]));
            System.out.println( calculateDaysUntil18(birthday));
        }
    }

    public static long calculateDaysUntil18(LocalDate birthday) {
        LocalDate turning18 = birthday.plusYears(18);
        return ChronoUnit.DAYS.between(birthday, turning18);
    }
}