这是一个根据datePicker计算输入日期与系统日期差的例子
输入日期的取得是个问题
xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<DatePicker
android:id="@+id/dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:calendarViewShown="false" />
<TextView
android:id="@+id/tv_dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="选择的日期为" />
<TimePicker
android:id="@+id/tp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<TextView
android:id="@+id/tv_tp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="选择的时间为" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="试试看" />
</LinearLayout>
MainActivity
package com.example.dptp;
import java.util.Calendar;
import java.util.Date;
import android.os.Bundle;
import android.R.integer;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
public class MainActivity extends Activity
{
private TimePicker mTimePicker;
private DatePicker mDatePicker;
private TextView tpTextView;
private TextView dpTextView;
int userYear = 0;
int userMonth = 0;
int userDay = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTimePicker = (TimePicker) findViewById(R.id.tp);
mDatePicker = (DatePicker) findViewById(R.id.dp);
tpTextView = (TextView) findViewById(R.id.tv_tp);
dpTextView = (TextView) findViewById(R.id.tv_dp);
// 获得系统当前的年月日
Calendar today = Calendar.getInstance();
today.setTime(new Date());
int sYear = today.get(Calendar.YEAR);
int sMonth = today.get(Calendar.MONTH);
int sDay = today.get(Calendar.DAY_OF_MONTH);
System.out.println("==================当前系统的年月日" + sYear + (sMonth + 1)
+ sDay);
// 获取用户输入的年月日
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("======================输入的年月日(应该是错误的)"
+ (year + month + 1) + day);
mDatePicker.init(year, month, day, new OnDateChangedListener()
{
@Override
public void onDateChanged(DatePicker view, int year,
int monthOfYear, int dayOfMonth)
{
dpTextView.setText("选择的日期是: " + year + (monthOfYear + 1)
+ dayOfMonth);
System.out.println("datePicker.init方法中的年月日: " + year
+ (monthOfYear + 1) + dayOfMonth);
userYear = year;
userMonth = monthOfYear + 1;
userDay = dayOfMonth;
}
});
System.out.println("======================输入的年月日(应该是正确的)" + userYear
+ userMonth + userDay);
Button button = (Button) findViewById(R.id.btn);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
System.out
.println("======================在button中获取的输入的年月日(应该是正确的)"
+ userYear + userMonth + userDay);
}
});
// 计算相差的时间
Calendar birthday = Calendar.getInstance();
birthday.set(year, (month + 1), day);
long diff = today.getTimeInMillis() - birthday.getTimeInMillis();
long days = diff / (24 * 60 * 60 * 1000);
System.out.println("===========相差的天数为" + days);
mTimePicker.setOnTimeChangedListener(new OnTimeChangedListener()
{
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute)
{
tpTextView.setText("选择的时间是 " + hourOfDay + minute);
}
});
}
}
可以看到,日期监听器的init内部是个void方法,这下去求,用户设置的日期都在这个void方法里面,怎么取。
我最开始在外面声明了全局变量,想着方法里面赋值了吧,然后输出就能看到了吧,不行。
因为这个时候,你还没有输入日期,还没有触发点击事件。
感谢QQ群里不认识的好心人指点,将近4个小时之后,提供了2个方法:
1 既然你没有确定日期输入完毕的方法,就建立个button ,在其监听器里面去取,因为当你点选日期完毕就已经赋值完成,但是你在onCreat方法里面取永远都是取的未点击日期时候的值,也就是上面的方法,成功了。
2 在内部类外建立数组或者集合,需要使用的话,就传递他们。未实验