Рассчитать текущий возраст;используя Java - PullRequest
1 голос
/ 26 октября 2011

Я пытаюсь вычислить текущий возраст пользователя ... но использование формата, который я хотел бы использовать, вызвало некоторые проблемы для меня.

Я мог бы просто спросить отдельно год, месяц и день, но гораздо лучше (мм / дд / гггг)

Ответы [ 4 ]

3 голосов
/ 26 октября 2011

Вот подсказка, как вы могли бы прочитать и проанализировать введенную дату:

SimpleDateFormat f = new SimpleDateFormat("MM/dd/yyyy"); //note that mm is minutes, so you need MM here
Scanner s = new Scanner( System.in );

String dateLine = s.nextLine();
try
{
  Date d = f.parse( dateLine );
  System.out.println(d);
}
catch( ParseException e )
{
  System.out.println("please enter a valid date in format mm/dd/yyyy");
}

Это всего лишь пример, и вы должны начать правильно читать дату.

Для получения лет, дней и месяцев между двумя датами я все равно рекомендую использовать JodaTime, поскольку это значительно облегчает жизнь.

Используя стандартные средства Java, это может помочь вам:

Calendar c = Calendar.getInstance();
c.setTimeInMillis( System.currentTimeMillis() - d.getTime() );
System.out.println( c.get( Calendar.YEAR ) - 1970 ); //since year is based on 1970, subtract that
System.out.println( c.get( Calendar.MONTH ) );
System.out.println( c.get( Calendar.DAY_OF_MONTH ) );

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

Это дало бы разницу в 0 лет, 9 полных месяцев и 26 дней с 1 января 2011 года по 26 октября 2011 года и разницу в 21 год и 1 день (поскольку мы уже начали этот день) между 26 октября 1990 года и октябрем 26th 2011.

1 голос
/ 22 декабря 2011

попробуйте это, он помещает age в поле формы, называемое age, в форму, называемую «form», предполагается, что вы назвали свое текстовое поле (где вводится DOB) «dob»

var d =document.getElementById('dob').value.split('/'); 
var today = new Date(); 
var bday = new Date(d[2],d[1],d[0]);
var age = today.getFullYear() - bday.getFullYear();  
if(today.getMonth() < bday.getMonth() || (today.getMonth() == bday.getMonth() && today.getDate() < bday.getDate()))  
{
     t = age--;  
}
else {
t = age
}
form.age.value = t; 
} 
1 голос
/ 26 октября 2011

Если вы хотите использовать JodaTime:

String dob = myScanner.nextLine();
DateTimeFormatter format = DateTimeFormatter.forPattern("MM/dd/yyyy");
DateTime dateTimeOfBirth = DateTime.parse(dob, format);

year = dateTimeOfBirth.getYear();
// Etc
0 голосов
/ 26 октября 2011

Вам может понадобиться что-то подобное:

SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy", Locale.US);
Date date = sdf.parse(timestamp);
Calendar cd = Calendar.getInstance();
cd.setTime(date);
...