您的位置:首页 > 移动开发 > Android开发

Android 自定义日期和时间和星期的弹窗

2016-01-04 23:45 771 查看
public class MainActivity extends Activity implements OnClickListener {

// 文本日期
private TextView tvEndDate;
private TextView tvEndTime;

private Button button1;
private Button button2;
private Intent localIntent;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_time_picker);

tvEndDate = (TextView) findViewById(R.id.lv_publish_end_date_tv);
tvEndTime = (TextView) findViewById(R.id.lv_publish_end_time_tv);
initDataAndTime(tvEndDate, tvEndTime);

button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);

button1.setOnClickListener(this);
button2.setOnClickListener(this);
}

/**
* 初始化日期和时间 (定位时间到每周周五)
*
* @param paramTextView1
* @param paramTextView2
*/
public void initDataAndTime(TextView paramTextView1, TextView paramTextView2) {

Calendar localCalendar1 = Calendar.getInstance();
int i = localCalendar1.get(1);
int j = localCalendar1.get(2);
int k = localCalendar1.get(5);
int m = -1 + (7 + localCalendar1.get(5) - localCalendar1.get(7));
int n = localCalendar1.get(11);
if (((k == m) && (n >= 18)) || (k > m)) {
m = -1 + (14 + localCalendar1.get(5) - localCalendar1.get(7));
}
if (m > DateTimeUtility.getDaysOfCurrentMonth()) {
if (j + 1 >= 12) {
i++;
}
Calendar localCalendar2 = DateTimeUtility
.convertDateToCalendar(DateTimeUtility.covertStringToDate(i
+ "-" + (j + 1) + "-" + m + " " + 18 + ":00",
"yyyy-MM-dd HH:mm"));
j = localCalendar2.get(2);
m = localCalendar2.get(5);
}
paramTextView1.setText(i + "-" + (j + 1) + "-" + m);
paramTextView2.setText(18 + ":" + "00");
}

@Override
public void onClick(View v) {

switch (v.getId()) {
case R.id.button1:
localIntent = new Intent(this, DateTimePickerActivity.class);
localIntent.putExtra("date", tvEndDate.getText().toString() + " "+ tvEndTime.getText().toString());
localIntent.putExtra("time", false);
startActivityForResult(localIntent, 1003);

break;
case R.id.button2:
localIntent = new Intent(this, DateTimePickerActivity.class);
localIntent.putExtra("date", tvEndDate.getText().toString() + " "+ tvEndTime.getText().toString());
localIntent.putExtra("time", true);
startActivityForResult(localIntent, 1003);
break;
default:
break;
}
}

/**
* 返回的结果
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
int k;
if (resultCode == -1) {

if (requestCode != 1003) {
return;
}
k = data.getIntExtra("isTime", 0);
if (k == 2) {
String endDate = data.getStringExtra("Day");
tvEndDate.setText(endDate);
}
if (k == 1) {
String endTime = data.getStringExtra("Times");
tvEndTime.setText(endTime);
}

}
}

}
public class DateTimePickerActivity extends Activity implements OnClickListener {

protected String className = this.getClass().getName();

private static final int theEndOfTheDay = 18;
private static final int theNoonOfTheDay = 12;
private Calendar calendar;
private DatePicker datePicker;

private int day;
private int hourOfDay;
private boolean isTime;
private int minute;
private int month;
private TimePicker timePicker;
private String[] weekDays;
private int year;

String str;

// ----------------------------------------------
private Button timeMakeSure;
private Button timeNoon;
private Button timeAfterNoon;
private NumberPicker npTimeWeek;
// -----------------------------------------------
private Button dateMakeSure;
private Button today;
private Button tomorrow;
private Button thisWeek;
private NumberPicker npDateWeek;

private String[] arrayOfStrings;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

initView();
initData();
initEvent();
}

private void initView() {

showAsPopup(this);

this.isTime = getIntent().getBooleanExtra("time", false);
System.out.println("时间" + isTime);

if (this.isTime) {
System.out.println("如何不是时间-------");
findViewById(R.id.day_group).setVisibility(View.VISIBLE);
findViewById(R.id.time_group).setVisibility(View.GONE);
}

this.weekDays = getResources().getStringArray(R.array.week_day);
this.npDateWeek = (NumberPicker) findViewById(R.id.np_date_week);
this.npDateWeek.setMinValue(0);
this.npDateWeek.setMaxValue(0);
this.npDateWeek.setDisplayedValues(null);

this.npTimeWeek = (NumberPicker) findViewById(R.id.np_time_week);
this.npTimeWeek.setMinValue(0);
this.npTimeWeek.setMaxValue(0);
this.npTimeWeek.setDisplayedValues(null);

this.datePicker = ((DatePicker) findViewById(R.id.date_pick));
this.timePicker = ((TimePicker) findViewById(R.id.time_pick));

timeMakeSure = (Button) findViewById(R.id.pick_time_make_sure);
timeNoon = (Button) findViewById(R.id.time_noon);
timeAfterNoon = (Button) findViewById(R.id.time_afternoon);
// npTimeWeek = (NumberPicker) findViewById(R.id.np_time_week);

// --------------------------------------------------------------
dateMakeSure = (Button) findViewById(R.id.pick_date_make_sure);
today = (Button) findViewById(R.id.today);
tomorrow = (Button) findViewById(R.id.tomorrow);
thisWeek = (Button) findViewById(R.id.this_week);

/**
* 关闭可编辑模式
*/
npTimeWeek
.setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);
npDateWeek
.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
datePicker
.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
timePicker
.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
}

protected void initData() {

str = getIntent().getStringExtra("date");

System.out.println("得到的时间为:" + str + className);

if (!TextUtils.isEmpty(str)) {

initDateWeek(str);

deteAndTimePickerChange();
}
}

protected void initEvent() {

try {
/**
* 通过反射获取到日期
*/
Class localClass = this.datePicker.getClass();
Class[] arrayOfClass = new Class[1];
arrayOfClass[0] = Boolean.TYPE;
@SuppressWarnings("unchecked")
Method localMethod = localClass.getMethod("setCalendarViewShown",arrayOfClass);
DatePicker localDatePicker = this.datePicker;
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] = Boolean.valueOf(false);
localMethod.invoke(localDatePicker, arrayOfObject);

if (this.isTime) {

this.timePicker.setVisibility(View.VISIBLE);
this.datePicker.setVisibility(View.GONE);

timeMakeSure.setOnClickListener(this);
timeNoon.setOnClickListener(this);
timeAfterNoon.setOnClickListener(this);

findViewById(R.id.day_group).setVisibility(View.GONE);
findViewById(R.id.time_group).setVisibility(View.VISIBLE);
this.calendar = DateTimeUtility
.convertDateToCalendar(DateTimeUtility
.covertStringToDate(str, "yyyy-MM-dd HH:mm"));
} else {

dateMakeSure.setOnClickListener(this);
today.setOnClickListener(this);
tomorrow.setOnClickListener(this);
thisWeek.setOnClickListener(this);
}
} catch (Exception localException) {
//
this.timePicker.setVisibility(View.VISIBLE);
this.datePicker.setVisibility(View.GONE);
}

}

/**
* 设置星期几
*/
private void setWeekDate() {
try {
this.calendar = DateTimeUtility
.convertDateToCalendar(DateTimeUtility.covertStringToDate(
this.year + "-" + (1 + this.month) + "-" + this.day
+ " " + this.hourOfDay + ":00",
"yyyy-MM-dd HH:mm"));
int i = this.calendar.get(7);
NumberPicker localNumberPicker = this.npDateWeek;
arrayOfStrings = new String[1];
arrayOfStrings[0] = this.weekDays[(i - 1)];
localNumberPicker.setDisplayedValues(arrayOfStrings);

System.out.println(arrayOfStrings[0] + className + "设置星期几的方法----");

} catch (Exception localException) {
localException.printStackTrace();
}
}

/**
* 显示popWindow
*
* @param paramActivity
*/
public static void showAsPopup(Activity paramActivity) {
paramActivity.getWindow().setFlags(2, 2);
WindowManager.LayoutParams localLayoutParams = paramActivity
.getWindow().getAttributes();
localLayoutParams.height = -1;
localLayoutParams.width = -1;
localLayoutParams.alpha = 1.0F;
localLayoutParams.dimAmount = 0.5F;
paramActivity.getWindow().setAttributes(localLayoutParams);
paramActivity.setContentView(R.layout.picker_date_time);
}

/**
* 日期和时间改变时的方法
*/
private void deteAndTimePickerChange() {
this.datePicker.init(this.year, this.month, this.day,
new DatePicker.OnDateChangedListener() {
public void onDateChanged(DatePicker view, int years,
int monthOfYear, int dayOfMonth) {

year = years;
month = monthOfYear;
day = dayOfMonth;

System.out.println(years + "-" + monthOfYear + "-"
+ dayOfMonth + "deteAndTimePickerChange调用了。。。");

DateTimePickerActivity.this.setWeekDate();
}
});
this.timePicker.setIs24HourView(Boolean.valueOf(true));
this.timePicker.setCurrentHour(Integer.valueOf(this.hourOfDay));
this.timePicker.setCurrentMinute(Integer.valueOf(this.minute));

this.timePicker
.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
public void onTimeChanged(TimePicker view, int hourOfDays,
int minutes) {

hourOfDay = hourOfDays;
minute = minutes;

System.out.println(hourOfDay + ":" + minute
+ "setOnTimeChangedListener调用了。。。");

}
});
if (Build.VERSION.SDK_INT < 11) {

}
}
/**
* 时间按钮确定的点击事件
*/
private void makeSureTimeOnClick() {

Intent localIntent = new Intent();

StringBuilder localStringBuilder = new StringBuilder()
.append(hourOfDay).append(":");

System.out.println(localStringBuilder.toString() + className);

if (minute < 10) {

String localObject = "0" + minute;
localStringBuilder.append(localObject);
localIntent.putExtra("Times", localStringBuilder.toString());

}

// System.out.println(className + "------点击确定后输出的日期为------" + year +
// "-"+ (1 + month) + "-" + day);
localIntent.putExtra("isTime", 1);
setResult(-1, localIntent);
finish();
}

/**
* 确定点击时的响应
*/
private void makeSureDateOnClick() {

Intent localIntent = new Intent();
localIntent.putExtra("Day", year + "-" + (1 + month) + "-" + day);
System.out.println(className + "------点击确定后输出的日期为------" + year + "-"
+ (1 + month) + "-" + day);
localIntent.putExtra("isTime", 2);
setResult(-1, localIntent);
finish();
}

/**
* 本周按钮被点击
*/
private void thisWeekButtonClick() {
Calendar localCalendar1 = Calendar.getInstance();
int i = localCalendar1.get(1);
int j = localCalendar1.get(2);
int k = -1 + (7 + localCalendar1.get(5) - localCalendar1.get(7));
int m = localCalendar1.get(11);
int n = localCalendar1.get(5);
if (((n == k) && (m >= 18)) || (n > k)) {
k = -1 + (14 + localCalendar1.get(5) - localCalendar1.get(7));
}
if (k > DateTimeUtility.getDaysOfCurrentMonth()) {
if (j + 1 >= 12) {
i++;
}
Calendar localCalendar2 = DateTimeUtility
.convertDateToCalendar(DateTimeUtility.covertStringToDate(i
+ "-" + (j + 1) + "-" + k + " " + 18 + ":00",
"yyyy-MM-dd HH:mm"));
j = localCalendar2.get(2);
k = localCalendar2.get(5);
}
datePicker.updateDate(i, j, k);
}

/**
* 明天按钮的点击
*/
private void tomorrowButtonClick() {
Calendar localCalendar1 = Calendar.getInstance();
int i = localCalendar1.get(1);
int j = localCalendar1.get(2);
int k = 1 + localCalendar1.get(5);
if (k > DateTimeUtility.getDaysOfCurrentMonth()) {
if (j + 1 >= 12) {
i++;
}
Calendar localCalendar2 = DateTimeUtility
.convertDateToCalendar(DateTimeUtility.covertStringToDate(i
+ "-" + (j + 1) + "-" + k + " " + 18 + ":00",
"yyyy-MM-dd HH:mm"));
j = localCalendar2.get(2);
k = localCalendar2.get(5);
}
datePicker.updateDate(i, j, k);
}

/**
* 今天按钮被点击
*/
private void todayButtonClick() {
Calendar localCalendar = Calendar.getInstance();
int i = localCalendar.get(1);
int j = localCalendar.get(2);
int k = localCalendar.get(5);
datePicker.updateDate(i, j, k);
}

/**
* 下班按钮被点击
*/
private void timeAfterNoonClick() {
Calendar localCalendar = Calendar.getInstance();
localCalendar.get(1);
localCalendar.get(2);
localCalendar.get(5);
timePicker.setCurrentHour(Integer.valueOf(18));
timePicker.setCurrentMinute(Integer.valueOf(0));
}

/**
* 中午按钮被点击
*/
private void timeNoonClick() {
Calendar localCalendar = Calendar.getInstance();
localCalendar.get(1);
localCalendar.get(2);
localCalendar.get(5);
timePicker.setCurrentHour(Integer.valueOf(12));
timePicker.setCurrentMinute(Integer.valueOf(0));
}

/**
* 初始化星期几
*/
private void initDateWeek(String dateAndTime) {

String date = spliteString(dateAndTime, " ", "index", "front"); // 日期
String time = spliteString(dateAndTime, " ", "index", "back"); // 时间

year = Integer.parseInt(spliteString(date, "-", "index", "front")); // 年份
String monthAndDay = spliteString(date, "-", "index", "back"); // 月日

month = Integer.parseInt(spliteString(monthAndDay, "-", "index",
"front")) - 1; // 月
day = Integer.parseInt(spliteString(monthAndDay, "-", "index", "back")); // 日

hourOfDay = Integer.parseInt(spliteString(time, ":", "index", "front")); // 时
minute = Integer.parseInt(spliteString(time, ":", "index", "back")); // 分

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, day);

int i = cal.get(7);
// 设置数字选择器的值
NumberPicker localNumberPicker = this.npDateWeek;
String[] arrayOfString = new String[1];
arrayOfString[0] = this.weekDays[(i - 1)];

// System.out.println(arrayOfString[0] + "======初始化星期几的方法=======");

localNumberPicker.setDisplayedValues(arrayOfString);
npTimeWeek.setDisplayedValues(arrayOfString);
}

/**
* 截取子串
*
* @param srcStr
*            源串
* @param pattern
*            匹配模式
* @param indexOrLast
* @param frontOrBack
* @return
*/
public static String spliteString(String srcStr, String pattern,
String indexOrLast, String frontOrBack) {
String result = "";
int loc = -1;
if (indexOrLast.equalsIgnoreCase("index")) {
loc = srcStr.indexOf(pattern); // 取得字符串第一次出现的位置
} else {
loc = srcStr.lastIndexOf(pattern); // 最后一个匹配串的位置
}
if (frontOrBack.equalsIgnoreCase("front")) {
if (loc != -1)
result = srcStr.substring(0, loc); // 截取子串
} else {
if (loc != -1)
result = srcStr.substring(loc + 1, srcStr.length()); // 截取子串
}
return result;
}

protected void onDestroy() {
this.datePicker = null;
this.timePicker = null;
super.onDestroy();
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pick_time_make_sure:
makeSureTimeOnClick();
break;
case R.id.time_noon:
timeNoonClick();
break;
case R.id.time_afternoon:
timeAfterNoonClick();
break;
case R.id.pick_date_make_sure:
makeSureDateOnClick();
break;
case R.id.today:
todayButtonClick();
break;
case R.id.tomorrow:
tomorrowButtonClick();
break;
case R.id.this_week:
thisWeekButtonClick();
break;
}

}

}


public class DateTimeUtility {

public static final long MILLISECONDS_PER_DAY = 86400000L;
public static final long MILLISECONDS_PER_HOUR = 3600000L;
public static final long MILLISECONDS_PER_MIN = 60000L;
public static final long MILLISECONDS_PER_SECOND = 1000L;
private static int _localTimeZoneOffsetInMilliseconds = TimeZone
.getDefault().getRawOffset();
private static final String _standardFormat = "yyyy-MM-dd HH:mm:ss";
private static final String _standardFormat_ms = "yyyy-MM-dd HH:mm:ss.SSS";

/**
* 转换日期成日历
*
* @param paramDate
* @return
*/
public static Calendar convertDateToCalendar(Date paramDate) {
Calendar localCalendar = Calendar.getInstance();
localCalendar.setTime(paramDate);
return localCalendar;
}

/**
* 转换本地到世界时间
*
* @param paramDate
* @return
*/
public static Date convertLocalToUtc(Date paramDate) {
return new Date(paramDate.getTime()
- _localTimeZoneOffsetInMilliseconds);
}

/**
* 转换字符串成国内日期
*
* @param paramString1
* @param paramString2
* @return
*/
private static Date convertStringToDateInternal(String paramString1,
String paramString2) {
SimpleDateFormat localSimpleDateFormat = new SimpleDateFormat(
paramString2);
try {
Date localDate = localSimpleDateFormat.parse(paramString1);
return localDate;
} catch (ParseException localParseException) {

}
return null;
}

/**
* 转换国际时间成本地
*
* @param paramDate
* @return
*/
public static Date convertUtcToLocal(Date paramDate) {
return new Date(paramDate.getTime()
+ _localTimeZoneOffsetInMilliseconds);
}

public static Date covertStringFromUtcStringDataToGmtDate(String paramString) {
return convertUtcToLocal(covertStringToDate(paramString));
}

/**
* 转换字符串成日期
*
* @param paramString
* @return
*/
public static Date covertStringToDate(String paramString) {
if (TextUtils.isEmpty(paramString)) {
return null;
}
return convertStringToDateInternal(paramString, "yyyy-MM-dd HH:mm:ss");
}

/**
* 转换字符串成日期
*
* @param paramString1
* @param paramString2
* @return
*/
public static Date covertStringToDate(String paramString1,
String paramString2) {
if (TextUtils.isEmpty(paramString1)) {
return null;
}
return convertStringToDateInternal(paramString1, paramString2);
}

public static Date covertStringToDateWithMs(String paramString) {
int i = paramString.length();
if ((TextUtils.isEmpty(paramString)) && (i <= 4)) {
return null;
}
if (paramString.charAt(i - 4) == '.') {
return convertStringToDateInternal(paramString,
"yyyy-MM-dd HH:mm:ss.SSS");
}
return convertStringToDateInternal(paramString, "yyyy-MM-dd HH:mm:ss");
}

public static long getDateDiffInDays(Date paramDate1, Date paramDate2) {
return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 86400000L;
}

public static long getDateDiffInHours(Date paramDate1, Date paramDate2) {
return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 3600000L;
}

public static long getDateDiffInMilliSeconds(Date paramDate1,
Date paramDate2) {
Calendar localCalendar1 = convertDateToCalendar(paramDate1);
Calendar localCalendar2 = convertDateToCalendar(paramDate2);
return localCalendar1.getTimeInMillis()
- localCalendar2.getTimeInMillis();
}

public static long getDateDiffInSeconds(Date paramDate1, Date paramDate2) {
return getDateDiffInMilliSeconds(paramDate1, paramDate2) / 1000L;
}

public static String getDateTimeString(Date paramDate) {
return getDateTimeString(paramDate, "yyyy-MM-dd HH:mm:ss");
}

@SuppressLint("SimpleDateFormat")
public static String getDateTimeString(Date paramDate, String paramString) {
return new SimpleDateFormat(paramString).format(paramDate);
}

public static String getDateTimeStringWithMs(Date paramDate) {
return getDateTimeString(paramDate, "yyyy-MM-dd HH:mm:ss.SSS");
}

public static int getDaysOfCurrentMonth() {
Calendar localCalendar = Calendar.getInstance();
localCalendar.set(5, 1);
localCalendar.roll(5, -1);
return localCalendar.get(5);
}

public static int getDaysOfYearMonth(int paramInt1, int paramInt2) {
Calendar localCalendar = Calendar.getInstance();
localCalendar.set(1, paramInt1);
localCalendar.set(2, paramInt2 - 1);
localCalendar.set(5, 1);
localCalendar.roll(5, -1);
return localCalendar.get(5);
}
}

代码很简单,注释也写得比较清楚,我就不做过多赘述。







代码下载 http://download.csdn.net/detail/developandroid/9390047
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: