با نام خدا و سلام، به امید خدا تو این پست میخوام در مورد کار کردن با DataPicker و TimePicker و دیگر نیازمندی های زمان و تاریخ در اندروید بنویسم.
اول از همه ما دو تا دیالوگ داریم با نام های
DatePickerDialog
و
TimePickerDialog
که همونطور که از اسمشون پیداست برای گرفتن زمان و تاریخ توسط دیالوگ ازشون استفاده میشه. (تصاویر هر دو دیالوگ را در ادامه ملاحضه می کنید)
خب اما فراخوانی این دیالوگ ها به چه صورت هست!؟
من برای مثال، دو تا دکمه (button) گذاشتم یکه یک برای گرفتن تاریخ و یکی برای گرفتن زمان کاربرد داره. کد پشت این دو دکمه به صورت زیر میشه (توضیحات بعد از نمونه کد زیر):
public void onClick(View v) { //Start Date Picker if (v == btnDatePickerStart) { // Get Current Date final Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { } }, mYear, mMonth, mDay); datePickerDialog.show(); } //Start Time Picker if (v == btnTimePickerStart) { // Get Current Time final Calendar c = Calendar.getInstance(); mHour = c.get(Calendar.HOUR_OF_DAY); mMinute = c.get(Calendar.MINUTE); // Launch Time Picker Dialog TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { } }, mHour, mMinute, false); timePickerDialog.show(); } }
خب دو تا دکمه داریم با نام های btnTimePickerStart و btnDatePickerStart، برای فراخوانی دیالوگ تاریخ تنها کد زیر کافیست:
// Get Current Date final Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { } }, mYear, mMonth, mDay); datePickerDialog.show();
برای فراخوانی دیالوگ زمان نیز کد زیر کفایت می کنه:
// Get Current Time final Calendar c = Calendar.getInstance(); mHour = c.get(Calendar.HOUR_OF_DAY); mMinute = c.get(Calendar.MINUTE); // Launch Time Picker Dialog TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { } }, mHour, mMinute, false); timePickerDialog.show();
حالا اگر بخواید برای مثال تاریخی که کاربر انتخاب کرده را بگیرید، کافیه داخل onDateSet یا onTimeSet کد خودتون رو بنویسید، برای مثال برای آنکه تاریخ انتخاب شده را داخل یه TextView نمایش بدید کافیه onDateSet به صورت زیر نوشته بشه:
@Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { txtDateEnd.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year); }
و به همین صورت برای نمایش زمان انتخاب شده توسط کاربر داخل onTimeSet نیز باید کد مرتبط را نوشت.
یکی دیگر از کارها اینه که برای مثال یه حداقل برای انتخاب تاریخ اعمال کنیم،برای مثال کاربر فقط بتونه از تاریخ امروز به بعد را انتخاب کنه، برای این کار تنها کافیه از تکه کد زیر استفاده کنید:
view.setMinDate(System.currentTimeMillis());
کد بالا کاربر را محدود ی کنه از تاریخ امروز به بعد را تنها انتخاب کنه، همان طور که مشخصه باید زمان مورد نظر را به صورت میلی ثانیه به setMinDate داد، حال اگر بخواید محدودیت را از یه تاریخ دلخواه اعمال کنید ، باید تاریخ مورد نظرتان را به میلی ثانیه تبدیل کنید، برای این کار می توانید از تکه کد زیر استفاده کنید:
///www.sadegh-khan.ir public long milliseconds(String date) { //String date_ = date; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { Date mDate = sdf.parse(date); long timeInMilliseconds = mDate.getTime(); //System.out.println("Date in milli :: " + timeInMilliseconds); return timeInMilliseconds; } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0; }
تابع فوق یه ورودی میخواد که به صورت String هست، برای تبدیل تاریخ گرفته شده (که سال و ماه و روز به صورت integer هستن) به String میتونید از کد زیر استفاده کنید:
public String dateFormat(int year, int month,int day) { /////"yyyy-MM-dd HH:mm:ss" String tempD; String tempM; if(day<10){ tempD = "0" + Integer.toString(day); } else{ tempD = Integer.toString(day); } if(month<10){ tempM = "0" + Integer.toString(month); } else{ tempM = Integer.toString(month); } String dateFormated= Integer.toString(year)+"-"+tempM+"-"+tempD; return dateFormated; }
حالا ترکیب این چند تا تابع فوق رو من تو یه مثال پایین آوردم:
// Get Current Date final Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { String endDateFormated = dateFormat(year,monthOfYear + 1,dayOfMonth); miliSecsDate = milliseconds (startDateFormated); view.setMinDate(miliSecsDate); txtDateEnd.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year); btnTimePickerEnd.setEnabled(true); } }, mYear, mMonth, mDay); datePickerDialog.getDatePicker().setMinDate(miliSecsDate); datePickerDialog.show();
مراجع: سایت اندروید دولوپر ،
سلام
من برای تاریخ و زمان کدهایی که قرار دادید استفاده کردم اما فقط تاریخ زمان حال رو نشون میده و
زمان انتخابی کاربر رو انتخاب نمیکنه! لطف میکنید راهنمایی کنین.
یک سری به این آدرس ها بزن :
http://smartlab.ir/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-persiandatepicker-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/
تو کامنتها دنبال جواب باش
http://smartlab.ir/%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D9%88-%D8%AA%D9%82%D9%88%DB%8C%D9%85-%D9%85%DB%8C%D9%84%D8%A7%D8%AF%DB%8C-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7-%DB%8C%DA%A9/