【发布时间】:2014-11-09 15:51:09
【问题描述】:
更新
我正在创建怀孕截止日期倒计时,因此我使用android.widget.DatePicker 作为设置截止日期的工具。
例如:
- 设置的截止日期是
Jan. 9 2015 - 现在的日期是
Nov. 9 2014 - 所以剩下的月、日和周是
2 months, 62 days and 8weeks
到目前为止,我只能显示设置的到期日期。
问题: 如何在用户设置截止日期时获得确切的月数周数和天数。
更新代码
代码如下:
private TextView txtResultDueDate ;
private DatePicker datePicker;
private Calendar calendar;
private int year;
private int month;
private int day;
static final int DATE_DIALOG_ID = 999;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
txtResultDueDate = (TextView) findViewById(R.id.txtDue);
btnChangeDate = (Button)findViewById(R.id.button1);
calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
showDate(year, month+1, day);
@SuppressWarnings("deprecation")
public void setDate(View view) {
showDialog(999);
Toast.makeText(getApplicationContext(), "ca", Toast.LENGTH_SHORT)
.show();
}
@Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
if (id == 999) {
return new DatePickerDialog(this, myDateListener, year, month, day);
}
return null;
}
private DatePickerDialog.OnDateSetListener myDateListener
= new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker arg0, int year, int month, int day) {
Chronology chrono = GregorianChronology.getInstance();
DateTime end = new DateTime(arg0.getYear(), arg0.getMonth(), arg0.getDayOfMonth(), 0, 0, chrono);
DateTime current = new DateTime();
Interval interval = new Interval(current.toInstant(), end.toInstant());
Period duePeriod = interval.toPeriod();
showDate(duePeriod.getYears(), duePeriod.getMonths(), duePeriod.getDays());
}
};
private void showDate(int year, int month, int day) {
txtResultDueDate.setText(new StringBuilder().append(day).append("/")
.append(month).append("/").append(year));
}
这是我在使用DatePicker 设置截止日期时遇到的错误:
致命异常:主要
java.lang.IllegalArgumentException: 结束时刻必须大于或等于开始
在 org.joda.time.base.Abstraction.checkInterval(AbstractInterval.java.63)
在 org.joda.time.base.BaseInterval(BaseInterval.java:94)
在 org.joda.time.Interval.(Interval.java.122)
在 com.date.androin.Profile$1.onDataset(Profile.java:168)
在 android.app.DatePickerDialog.tryNotifyDataSet(DatePickerDialog.java.148)
在 android.app.DatePickerDialog.onClick(DatePickerDialog.java.116)
在 com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
在 android.os.Handler.dispatchMessage(Handler.java:99)
在 android.os.Looper.loop(Looper.java:137)
在 android.app.ActivityThread.main(ActivityThread.java:5103)
在 java.lang.reflect.Method.invokeNative(Native Method)
在 java.lang.reflect.Method.invoke(Method.java:511)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
在 dalvik.system.NativeStrat.main(Native Method)
【问题讨论】:
-
发帖前请先搜索 StackOverflow。数百个问题和答案已经解决了这个话题。例如,如果在网页上查看,请注意右侧的“相关”问题。提示:专门搜索“joda”和“period”。
-
我尝试搜索我的问题,但我仍然找不到正确的答案。所以我尝试并决定发布一个问题。但我仍然会尝试寻找更多答案...
标签: java android date datepicker countdown