Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用方法时给出错误年份的日历_Java_String_Calendar_Datetime Format_Localdate - Fatal编程技术网

Java 使用方法时给出错误年份的日历

Java 使用方法时给出错误年份的日历,java,string,calendar,datetime-format,localdate,Java,String,Calendar,Datetime Format,Localdate,我必须在一个测试类的表格中找出从出生日期算起的年龄。这意味着我必须得到从现在的今天到选定的某个日期的日期。此外,我将该方法放在一个主类中。错误是我一直在为所有插入的变量获取2018。从我的代码(这里不全是)来看,第一个代码应该是58,而不是2018 这是代码 public static int ageMeth(String dob) { dob.split("/"); int years = 0; String tempDate = "";

我必须在一个测试类的表格中找出从出生日期算起的年龄。这意味着我必须得到从现在的今天到选定的某个日期的日期。此外,我将该方法放在一个主类中。错误是我一直在为所有插入的变量获取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;
}

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

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

你似乎有一些错误的印象

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

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

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

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

你的问题的正确答案在Nicholas K.的答案中

链接


你的任务是根据字符串格式给出的日期找到年龄吗?是的,字符串格式MM/DD/YYYY,为什么你不只是使用SimuleDATA格式并减去当前日期收到的日期?@克里斯蒂安:SimuleDead格式已经过时了,建议使用Java8的“Jack”——如果有帮助的话,考虑接受一个答案。回答得好。我建议您将所需时区传递给
LocalDate.now
,例如
LocalDate.now(ZoneId.of(“太平洋/威克”))
LocalDate.now(ZoneId.systemDefault())