Java 使用方法时给出错误年份的日历
我必须在一个测试类的表格中找出从出生日期算起的年龄。这意味着我必须得到从现在的今天到选定的某个日期的日期。此外,我将该方法放在一个主类中。错误是我一直在为所有插入的变量获取2018。从我的代码(这里不全是)来看,第一个代码应该是58,而不是2018 这是代码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 = "";
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
值?不是这样。打开可以在IDE(或编译器)中显示的警告。它会告诉您类似“应该以静态方式访问类型字符串中的静态方法valueOf(int)”。这意味着int
不是所讨论字符串的方法,而是valueOf
类的方法(这里的“静态”是指tihs)。因此,从中得到的结果与字符串无关string
将为您提供一个连接Integer.toString(p,i)
和p
的字符串?也不是这样。文件说: 以第二个参数指定的基数返回第一个参数的字符串表示形式i
String
类中的方法是如何工作的
此外,您正在尝试根据月份、日期和年份的差异构建一个新的LocalDate
。相反,您应该只从字符串中的月、日和年构建一个,然后找到从这个日期到今天之间经过的时间段(就像您已经在做的那样)
你的问题的正确答案在Nicholas K.的答案中
链接
LocalDate.now
,例如LocalDate.now(ZoneId.of(“太平洋/威克”))
或LocalDate.now(ZoneId.systemDefault())
。