【问题标题】:Calendar giving wrong year when using method使用方法时日历给出错误的年份
【发布时间】:2019-07-18 04:38:44
【问题描述】:

我必须找出从出生日期算起的年龄,放在测试班的表格中。这意味着我必须将现在的日期与所选日期的日期相匹配。此外,我将该方法放在主类中。错误是我一直为所有插入的变量获取 2018。从我的代码(不是全部在这里)中,第一个不是 2018 应该是 58。

这里是代码。

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

【问题讨论】:

  • 您的任务是根据字符串格式给出的日期来查找年龄吗?
  • 是字符串格式MM/DD/YYYY
  • 为什么不直接使用 SimpleDateFormat 并从当前日期中减去收到的日期?
  • @Christian:SimpleDateFormat 早已过时,建议使用 java-8 的 java.time
  • @Jack - 如果有帮助,请考虑接受答案。 What should I do when someone answers my question?

标签: java string calendar datetime-format localdate


【解决方案1】:

要根据传入的dob 查找年龄,您可以使用:

public static int ageMeth(String dob) {
    return Period.between(LocalDate.parse(dob, DateTimeFormatter.ofPattern("MM/dd/yyyy")), 
                          LocalDate.now()).getYears();
}

【讨论】:

  • 好答案。我建议您将所需时区传递给LocalDate.now,例如LocalDate.now(ZoneId.of("Pacific/Wake"))LocalDate.now(ZoneId.systemDefault())
【解决方案2】:

您似乎有一些错误的印象?

  • Integer.parseInt(someString.valueOf(someIndex)) 将为您提供someString 中索引someIndex 处数字的int 值?不是这样。在 IDE(或编译器)中打开警告。它会告诉你类似“String 类型的静态方法 valueOf(int) 应该以静态方式访问”。这意味着valueOf 不是所讨论的字符串的方法,而是String 类的方法(tihs 是此处“静态”的意思)。所以你从中得到的结果与字符串没有任何关系。
  • Integer.toString(p, i) 会给你一个连接pi 的字符串?也不是这样。文档说:

    以第二个参数指定的基数返回第一个参数的字符串表示形式。

它似乎可以帮助您了解String 类中的方法是如何工作的。

此外,您正在尝试根据月、日和年的差异构建一个新的LocalDate。相反,您应该仅从字符串中的月、日和年构建一个,然后找到该日期与今天之间经过的时间段(就像您已经在做的那样)。

Nicholas K 的答案是您问题的正确解决方案。

链接

【讨论】:

    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2016-04-11
    相关资源
    最近更新 更多