public class MainActivity extends Activity implements OnClickListener {// 文本日期private TextView tvEndDate;private TextView tvEndTime;private Button button1;private Button button2; private Intent localIntent;@Overrideprotected 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");}@Overridepublic 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;}}/** * 返回的结果 */@Overrideprotected 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;@Overrideprotected 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();}@Overridepublic 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

 

更多相关文章

  1. Android(安卓)自定义PopupWindow动画效果
  2. android 点击屏幕关闭 软键盘
  3. Android(安卓)日期工具类DateUtil
  4. Android(安卓)Studio RadioGroup判断点击按钮
  5. Android里面WebView加载HTML里面点击按钮调我Android方法
  6. Android点击通知栏返回正在运行的Activity
  7. Android(安卓)点击按钮,文字改变颜色
  8. android 使用动画 Button移动后不响应点击事件的解决办法
  9. Android(安卓)webview 点击超链接打开新的webview

随机推荐

  1. 《第一行代码Android》阅读笔记
  2. 安卓学习(初)第三章(2)(《第一行代码》)
  3. Android应用程序中Manifest.java文件的介
  4. ap6234移植
  5. Android5.0网络子系统
  6. android 获取系统中各种类型音量及对音量
  7. Android中的事件分发传递机制
  8. android recovery 系统代码分析【精】
  9. Android GridView使用注意的问题
  10. ANR超时时间的定义 .