我想得到2个日期之间的月数.日期是某人生日和当前日期.所以我得到两个日期之间的年数而不是月数.
假设我的日期是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;
Mehul Joisar.. 5
我最近创建了一个演示并上传到这里.
它使用JodaTime
库来获得有效的结果.
我希望它会有用.
截图:
码:
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中
注意:
1)不要忘记add JodaTime library
你的项目
2)正如你在布局文件中看到的那样,我使用了固定值"Start Date","End Date" to calculate Date Difference
和固定值"Birth Date" to calculate Age
.你可以replace it with your dynamic values
.
我最近创建了一个演示并上传到这里.
它使用JodaTime
库来获得有效的结果.
我希望它会有用.
截图:
码:
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中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_ android:layout_ 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_ android:layout_ android:text="Date Diff Calculator" android:text android:gravity="center" android:background="@android:color/darker_gray" /> <TextView android:layout_ android:layout_ android:text android:text="Start Date:" /> <TextView android:id="@+id/tvStartDate" android:layout_ android:layout_ android:text="06/09/2011" /> <TextView android:layout_ android:layout_ android:text android:text="End Date:" /> <TextView android:id="@+id/tvEndDate" android:layout_ android:layout_ android:text="29/10/2013" /> <TextView android:layout_ android:layout_ android:text android:text="Difference (Standard)" /> <TextView android:id="@+id/tvDifferenceStandard" android:layout_ android:layout_ android:text="result" /> <TextView android:layout_ android:layout_ android:text android:text="Difference (Custom)" /> <TextView android:id="@+id/tvDifferenceCustom" android:layout_ android:layout_ android:text="result" /> <TextView android:layout_ android:layout_ android:text="Age Calculator" android:text android:gravity="center" android:background="@android:color/darker_gray" /> <TextView android:layout_ android:layout_ android:text android:text="Birth Date:" /> <TextView android:id="@+id/tvBirthDate" android:layout_ android:layout_ android:text="01/09/1989" /> <TextView android:layout_ android:layout_ android:text android:text="Age (Standard)" /> <TextView android:id="@+id/tvAgeStandard" android:layout_ android:layout_ android:text="result" /> <TextView android:layout_ android:layout_ android:text android:text="Age (Custom)" /> <TextView android:id="@+id/tvAgeCustom" android:layout_ android:layout_ android:text="result" />
注意:
1)不要忘记add JodaTime library
你的项目
2)正如你在布局文件中看到的那样,我使用了固定值"Start Date","End Date" to calculate Date Difference
和固定值"Birth Date" to calculate Age
.你可以replace it with your dynamic values
.