Календарь дает неверный год при использовании метода - PullRequest
0 голосов
/ 24 февраля 2019

Я должен узнать возраст с даты рождения, указанный в таблице в классе тестеров.Это означает, что мне нужно получить дату текущего дня, а именно дату определенной выбранной даты.Более того, я поместил метод в основной класс.Ошибка в том, что я продолжаю получать 2018 для всех подключенных переменных. Из моего кода (не все здесь) это должно быть 58 для первого не 2018.

Вот код.

public static int ageMeth(String dob) {
        dob.split("/");
        int years = 0;
        String tempDate = "";
        boolean month = true;
        if (month) {
            // gets the month converts
            int x = Integer.parseInt(dob.valueOf(0));
            int y = Integer.parseInt(dob.valueOf(1));
            String xy = Integer.toString(x, y);
            int xyNum = Integer.parseInt(xy);
            LocalDateTime date = LocalDateTime.now();
            tempDate = date.toString();
            int p = Integer.parseInt(tempDate.valueOf(5));
            int i = Integer.parseInt(tempDate.valueOf(6));
            String pi = Integer.toString(p, i);
            int piNum = Integer.parseInt(pi);


            // the days
            int x2 = Integer.parseInt(dob.valueOf(2));
            int y2 = Integer.parseInt(dob.valueOf(3));
            String xy2 = Integer.toString(x2, y2);
            int xyNum2 = Integer.parseInt(xy2);

            int p2 = Integer.parseInt(tempDate.valueOf(8));
            int i2 = Integer.parseInt(tempDate.valueOf(9));
            String pi2 = Integer.toString(p2, i2);
            int piNum2 = Integer.parseInt(pi2);


            // the year
            int x3 = Integer.parseInt(dob.valueOf(4));
            int y3 = Integer.parseInt(dob.valueOf(5));
            int xx3 = Integer.parseInt(dob.valueOf(6));
            int yy3 = Integer.parseInt(dob.valueOf(7));
            String xy3 = Integer.toString(x3, y3);
            String xxyy3 = Integer.toString(xx3, yy3);
            int xyNum3 = Integer.parseInt(xy2);
            int xxyyNum3 = Integer.parseInt(xxyy3);

            int p3 = Integer.parseInt(tempDate.valueOf(8));
            int i3 = Integer.parseInt(tempDate.valueOf(9));
            String pi3 = Integer.toString(p3, i3);
            int piNum3 = Integer.parseInt(pi3);

            // the main variables
            int newMonth = piNum - xyNum;
            int newDay = piNum2 - xyNum2;
            int newYear = piNum3 - (xyNum3 + xxyyNum3);

            LocalDate today = LocalDate.now();
            LocalDate birthday = LocalDate.of(newYear, newMonth, newDay);
            Period per = Period.between(birthday, today);
            years = per.getYears();
        } 
        return years;
}

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Кажется, у вас пара ложных впечатлений?

  • Integer.parseInt(someString.valueOf(someIndex)) даст вам значение int цифры в индексе someIndex в someString?Не так.Включите предупреждения, которые вы можете в вашей IDE (или компиляторе).Он скажет вам что-то вроде «Статический метод valueOf (int) из типа String должен быть доступен статическим способом».Это означает, что valueOf - это не метод рассматриваемой строки, а метод класса String (что в данном случае означает «статический»).Таким образом, полученный вами результат не будет иметь ничего общего со строкой.
  • Integer.toString(p, i) даст вам сформированную строку, объединяющую p и i?Тоже не так.Документация гласит:

    Возвращает строковое представление первого аргумента в основании, заданном вторым аргументом.

Кажется, что это будетпоможет вам узнать, как работают методы в классе String.

Более того, вы пытаетесь построить новый LocalDate из различий месяца, дня и года,Вместо этого вы должны построить один из месяца, дня и года только в строке, а затем впоследствии найти истекший период между этой датой и сегодняшним днем ​​(как вы уже делаете).

Правильное решение вашей проблемыв ответ Николас К.

Ссылки

0 голосов
/ 24 февраля 2019

Чтобы найти возраст на основе переданного dob, вы можете просто использовать:

public static int ageMeth(String dob) {
    return Period.between(LocalDate.parse(dob, DateTimeFormatter.ofPattern("MM/dd/yyyy")), 
                          LocalDate.now()).getYears();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...