[英]how to calculate age or difference between two dates in java
I want to get the number of months between 2 dates.The dates are someones birthday and the current date.So im getting the number of years in between the two dates but not the number of months.. 我想得到2个日期之间的月数。日期是某人生日和当前日期。所以我得到两个日期之间的年数而不是月数。
Suppose my dates are 06/09/2011 and 06/11/2012 .So i want the answer to be 1yr 2mths .I am getting the year but not the month.Please help.Below is the code for getting the number of years 假设我的日期是06/09/2011和06/11/2012 。所以我希望答案是1年2个月。我得到的一年而不是月份。请帮助。下面是获取年数的代码
public int getAge(Date dateOfBirth) {
today = Calendar.getInstance();
Calendar birthDate = Calendar.getInstance();
birthDate.setTime(dateOfBirth);
if (birthDate.after(today)) {
throw new IllegalArgumentException("Can't be born in the future");
}
age = today.get(Calendar.YEAR) - birthDate.get(Calendar.YEAR);
month = today.get(Calendar.MONTH) - birthDate.get(Calendar.MONTH);
if ( (birthDate.get(Calendar.DAY_OF_YEAR) - today.get(Calendar.DAY_OF_YEAR) > 3) ||
(birthDate.get(Calendar.MONTH) > today.get(Calendar.MONTH ))){
days = birthDate.get(Calendar.DAY_OF_MONTH) - today.get(Calendar.DAY_OF_MONTH);
age--;
Toast.makeText(getApplicationContext(), "inside if", Toast.LENGTH_SHORT).show();
Log.e("month is",month+"");
Log.e("Days",days+ " left");
}else if ((birthDate.get(Calendar.MONTH) == today.get(Calendar.MONTH )) &&
(birthDate.get(Calendar.DAY_OF_MONTH) > today.get(Calendar.DAY_OF_MONTH ))){
Toast.makeText(getApplicationContext(), "inside else if", Toast.LENGTH_SHORT).show();
age--;
}
return age;
I have recently created a demo and uploaded here . 我最近创建了一个演示并上传到这里 。
It is using JodaTime
library for efficient results. 它使用
JodaTime
库来获得有效的结果。
I hope it will be useful. 我希望它会有用。
Screenshot: 截图:
Code: 码:
MainActivity.java MainActivity.java
public class MainActivity extends Activity {
private SimpleDateFormat mSimpleDateFormat;
private PeriodFormatter mPeriodFormat;
private Date startDate;
private Date endDate;
private Date birthDate;
private TextView tvStartDate,tvEndDate,tvDifferenceStandard,tvDifferenceCustom,tvBirthDate,tvAgeStandard,tvAgeCustom;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
//determine dateDiff
Period dateDiff = calcDiff(startDate,endDate);
tvDifferenceStandard.setText(PeriodFormat.wordBased().print(dateDiff));
tvDifferenceCustom.setText( mPeriodFormat.print(dateDiff));
//determine age
Period age = calcDiff(birthDate,new Date());
tvAgeStandard.setText(PeriodFormat.wordBased().print(age));
tvAgeCustom.setText( mPeriodFormat.print(age));
}
private void init() {
//ui
tvStartDate = (TextView)findViewById(R.id.tvStartDate);
tvEndDate = (TextView)findViewById(R.id.tvEndDate);
tvDifferenceStandard = (TextView)findViewById(R.id.tvDifferenceStandard);
tvDifferenceCustom = (TextView)findViewById(R.id.tvDifferenceCustom);
tvBirthDate = (TextView)findViewById(R.id.tvBirthDate);
tvAgeStandard = (TextView)findViewById(R.id.tvAgeStandard);
tvAgeCustom = (TextView)findViewById(R.id.tvAgeCustom);
//components
mSimpleDateFormat = new SimpleDateFormat("dd/MM/yy");
mPeriodFormat = new PeriodFormatterBuilder().appendYears().appendSuffix(" year(s) ").appendMonths().appendSuffix(" month(s) ").appendDays().appendSuffix(" day(s) ").printZeroNever().toFormatter();
try {
startDate = mSimpleDateFormat.parse(tvStartDate.getText().toString());
endDate = mSimpleDateFormat.parse(tvEndDate.getText().toString());
birthDate = mSimpleDateFormat.parse(tvBirthDate.getText().toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private Period calcDiff(Date startDate,Date endDate)
{
DateTime START_DT = (startDate==null)?null:new DateTime(startDate);
DateTime END_DT = (endDate==null)?null:new DateTime(endDate);
Period period = new Period(START_DT, END_DT);
return period;
}
}
activity_main.xml activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Date Diff Calculator"
android:textStyle="bold"
android:gravity="center"
android:background="@android:color/darker_gray"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="Start Date:" />
<TextView
android:id="@+id/tvStartDate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="06/09/2011" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="End Date:" />
<TextView
android:id="@+id/tvEndDate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="29/10/2013" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="Difference (Standard)" />
<TextView
android:id="@+id/tvDifferenceStandard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="result" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="Difference (Custom)" />
<TextView
android:id="@+id/tvDifferenceCustom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="result" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Age Calculator"
android:textStyle="bold"
android:gravity="center"
android:background="@android:color/darker_gray"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="Birth Date:" />
<TextView
android:id="@+id/tvBirthDate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="01/09/1989" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="Age (Standard)" />
<TextView
android:id="@+id/tvAgeStandard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="result" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="Age (Custom)" />
<TextView
android:id="@+id/tvAgeCustom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="result" />
Note: 注意:
1) don't forget to add JodaTime library
to your project 1)不要忘记
add JodaTime library
到您的项目中
2) As you can see in layout file, I have used fixed value for "Start Date","End Date" to calculate Date Difference
and fixed value for "Birth Date" to calculate Age
. 2)正如您在布局文件中看到的,我使用
"Start Date","End Date" to calculate Date Difference
固定值"Start Date","End Date" to calculate Date Difference
和"Birth Date" to calculate Age
固定值"Birth Date" to calculate Age
。 You may replace it with your dynamic values
. 您可以
replace it with your dynamic values
。
Joda Time has code to do all this and more Joda Time有代码可以完成所有这些以及更多
You can do the following to get the month between two dates: 您可以执行以下操作以获取两个日期之间的月份:
Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startDate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(endDate);
int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);
Note: that if your dates are 2013-01-31
and 2013-02-01
, you get a distance of 1 month this way, which may or may not be what you want. 注意:如果您的日期是
2013-01-31
和2013-02-01
,那么您可以通过这种方式获得1个月的距离,这可能是您想要的,也可能不是。
Because this answer got referenced from here … 因为这个答案从这里引用了 ......
With java.time classes you can calculate the age very easy: 使用java.time类,您可以非常轻松地计算年龄:
long years = ChronoUnit.YEARS.between(LocalDate.of(1900, Month.NOVEMBER, 20), LocalDate.now());
or (if you need year and months) 或(如果您需要年份和月份)
Period p = Period.between(birthday, today);
p.getYears();
p.getMonths();
To count all the months in the entire period, as asked in the Question, call toTotalMonths
. 要按照问题中的要求计算整个期间的所有月份,请致电
toTotalMonths
。
int totalMonths = p.toTotalMonths();
Age can be calculate in a very easy way. 年龄可以很容易地计算出来。 The following is my complete java code .
以下是我完整的java代码。
public class age {
public static void main(String [] args){
Scanner s=new Scanner(System.in);
Date dd=new Date();
int d=Integer.parseInt(new SimpleDateFormat("dd").format(dd));
int m=Integer.parseInt(new SimpleDateFormat("MM").format(dd));
int y=Integer.parseInt(new SimpleDateFormat("yyyy").format(dd));
System.out.println( "Enter Day ");
int d1=Integer.parseInt(s.nextLine());
System.out.println( "Enter Month ");
int m1=Integer.parseInt(s.nextLine());
System.out.println( "Year");
int y1=Integer.parseInt(s.nextLine());
if(d<d1){
d+=30;
m-=1;
}
if(m<m1){
m+=12;
y-=1;
}
System.out.println((y-y1)+" years "+(m-m1)+" month "+(d-d1)+" days ");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.