I am doing datepicker. I am facing some challenges. I am checking wheather selected date is weekend or not. If it is weekend then it should give current date only. Now I don't know where should I put condition in this program and how to get the day of the week and against which thing I should check.
Please, help me.
// TimePickerDialog.OnTimeSetListener
{
//Declaration for class
ButtonViews views;
dpListener dpListenerView;
// Declartion for member vairables
int day, month, x_year;
int hour;
int minute;
Calendar calendar;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
views = new ButtonViews();
dpListenerView = new dpListener();
//ButtonListener
views.button_date.setOnClickListener(this);
views.button_time.setOnClickListener(this);
//
// pick up the default date using Calender class
calendar = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault());
curr_date();
hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);
setupDate(day, month, x_year);
setupTime(hour, minute);
}
public void curr_date(){
day = calendar.get(Calendar.DAY_OF_MONTH);
month = calendar.get(Calendar.MONTH);
x_year = calendar.get(Calendar.YEAR);
}
#Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_date:
showDatePickerDialog();
break;
case R.id.button_time:
/* showTimePickerDialog();*/
break;
}
}
private void setupTime(int hours, int minutes) {
views.button_time.setText(hours + ":" + minutes);
}
private void setupDate(int day, int month, int year) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy");
String strMonth = ((month + 1) <= 9) ? ("0" + (month + 1)) : String.valueOf(month + 1);
views.button_date.setText(String.valueOf(day) + "/" + strMonth + "/" + String.valueOf(year));
String strDate = String.valueOf(day) + "/" + strMonth + "/" + String.valueOf(year);
Date d = null;
try {
d = (Date) sdf.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
calendar.setTime(d);
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
if(dayOfWeek == 7 || dayOfWeek == 1) {
Toast.makeText(DateTimePickerActivity.this,"You have chosen weekend",Toast.LENGTH_SHORT);
}
}
private void showDatePickerDialog() {
DatePickerDialog datepickerdialog = new DatePickerDialog
(
this,
dpListenerView,
/* new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
} },*/
//this,
x_year,
month,
day
);
datepickerdialog.show();
}
class ButtonViews {
Button button_time;
Button button_date;
public ButtonViews() {
button_date = (Button) findViewById(R.id.button_date);
button_time = (Button) findViewById(R.id.button_time);
}
}
class dpListener implements OnDateSetListener {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
setupDate(dayOfMonth, monthOfYear, year);
/* if(dayOfWeek == 7 || dayOfWeek == 1) {*/
// as your requirement: you should display message they can not select the weekend" here
// then you set the value in datepickerdialog by current date
// Toast.makeText(DateTimePickerActivity.this
// , "You have selected weekend ", Toast.LENGTH_SHORT).show();
// }
}
}
}
Related
In here 'onClickListner' on 'Image Button' my custom 'DatePickerFragment' is displaying to select the date. Below is the code for
DatePickerFragment.java
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.widget.DatePicker;
import java.util.Calendar;
/**
* Created by Admin on 9/4/18.
*/
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
private onDatePickerListener mListener;
private boolean future;
public DatePickerFragment(){
}
// public DatePickerFragment(boolean future){
// this.future=future;
// }
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
Log.d("DATE_PICKER", " CURRENT_MONTH " + month);
int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.AppBaseTheme,this, year, month, day);
if(isFuture() ==false){
datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
}
// Create a new instance of DatePickerDialog and return it
return datePickerDialog;
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
callListener(year, month, day);
}
public DialogFragment setCallbackListener(onDatePickerListener listener) {
mListener = listener;
return null;
}
private void callListener(int year, int month, int day) {
if (mListener != null) mListener.onDataSet(year, month, day);
}
public boolean isFuture() {
return future;
}
public void setFuture(boolean future) {
this.future = future;
}
public interface onDatePickerListener {
void onDataSet(int year, int month, int day);
}
}
Then I call this 'Fragment' in my 'MainActivity' to set the date to 'EditText' when click on the 'OK' button from the 'DatePickerFragment'.
MainActivity.java
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.format.Time;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import com.sample.DatePickerFragment;
public class AddInterestedKarmaActivity extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_interested_karma);
ButterKnife.bind(this);
context = this;
EditText dateEdittext = (Edittext)findViewById(R.id.date_edit);
setDate(dateEditText);
}
private void setDate(final EditText dateEditText){
datePickerFragment.setCallbackListener(new DatePickerFragment.onDatePickerListener() {
#Override
public void onDataSet(int year, int month, int day) {
int currentMonth = 0;
if (month == 0) {
currentMonth = 1;
} else if (month == 1) {
currentMonth = 2;
} else if (month == 2) {
currentMonth = 3;
} else if (month == 3) {
currentMonth = 4;
} else if (month == 4) {
currentMonth = 5;
} else if (month == 5) {
currentMonth = 6;
} else if (month == 6) {
currentMonth = 7;
} else if (month == 7) {
currentMonth = 8;
} else if (month == 8) {
currentMonth = 9;
} else if (month == 9) {
currentMonth = 10;
} else if (month == 10) {
currentMonth = 11;
} else if (month == 11) {
currentMonth = 12;
} else if (month == 12) {
}
dateEditText.setText(day + "/" + currentMonth + "/" + year);
}
});
}
DialogFragment datePicker = datePickerFragment;
datePicker.show(getSupportFragmentManager(), "datePicker");
}
private void setTime(final EditText timeEditText){
final Calendar c = Calendar.getInstance();
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(context,
new TimePickerDialog.OnTimeSetListener() {
#Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
String curTime = String.format("%02d:%02d", hourOfDay, minute);
timeEditText.setText(curTime);
}
}, mHour, mMinute, false);
timePickerDialog.show();
}
}
I need to set the Date of 'DatePickerFragmenet' for a custom date (not today). such as set the 'DatePickerFragment' onCreate() to the mentioned above final int y, m, d values that from 'dateEditText'. And also I need to set the custom 'time' to the 'TimePickerDialog' such as 'DatePickerFragment'.
There is one function in DatePickerDialog to set custom date(updateDate(year_, month_, day_))
According to your code you need to make changes in your DatePickerFragment
in onCreateDialog of DatePickerFragment where you are getting date, month and year from calendar, instead of getting that from Calendar provide your custom dates.
Updated class is below
public class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
private onDatePickerListener mListener;
private boolean future;
int day_;
int month_;
int year_;
private DatePickerDialog datePickerDialog;
public DatePickerFragment() {
}
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
// final Calendar c = Calendar.getInstance();
// int year = c.get(Calendar.YEAR);
// int month = c.get(Calendar.MONTH);
// Log.d("DATE_PICKER", " CURRENT_MONTH " + month);
// int day = c.get(Calendar.DAY_OF_MONTH);
datePickerDialog = new DatePickerDialog(getActivity(), R.style.AppTheme, this, year_, month_, day_);
if (isFuture() == false) {
datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
}
// datePickerDialog.updateDate(year_, month_, day_);
// Create a new instance of DatePickerDialog and return it
return datePickerDialog;
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
callListener(year, month, day);
}
public DialogFragment setCallbackListener(onDatePickerListener listener) {
mListener = listener;
return null;
}
private void callListener(int year, int month, int day) {
if (mListener != null) mListener.onDataSet(year, month, day);
}
public boolean isFuture() {
return future;
}
public void setFuture(boolean future) {
this.future = future;
}
public interface onDatePickerListener {
void onDataSet(int year, int month, int day);
}
}
In your activity, you need to provide custom date.
Updated Activity is below, you can add your custom date.
public class AddInterestedKarmaActivity extends AppCompatActivity {
DatePickerFragment datePickerDialog;
EditText dateEdittext;
String customDate = "12/12/2007"; //dd/mm/yy
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_interested_karma);
dateEdittext = (EditText) findViewById(R.id.date_edit);
// setDate(dateEditText);
datePickerDialog = new DatePickerFragment();
datePickerDialog.day_ = getDay();
datePickerDialog.month_ = getMonth();
datePickerDialog.year_ = getYear();
datePickerDialog.setCallbackListener(new DatePickerFragment.onDatePickerListener() {
#Override
public void onDataSet(int year, int month, int day) {
month = month + 1;
dateEdittext.setText(day + "/" + month + "/" + year);
}
}
);
datePickerDialog.show(getSupportFragmentManager(), "datePicker");
}
private int getYear() {
return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "YYYY"));
}
private int getMonth() {
return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "MM")) - 1; //substract one from month because month gets start from 0 in Calendar.
}
private int getDay() {
return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "dd"));
}
public String changeDateFormat(String dateString, String sourceDateFormat, String targetDateFormat) {
if (dateString == null || dateString.isEmpty())
return "";
SimpleDateFormat inputDateFromat = new SimpleDateFormat(sourceDateFormat, Locale.US);
Date date = new Date();
try {
date = inputDateFromat.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat outputDateFormat = new SimpleDateFormat(targetDateFormat, Locale.US);
return outputDateFormat.format(date);
}
}
Calendar calender = Calendar.getInstance();
final CustomDatePickerDialog pickerDialog = new CustomDatePickerDialog(LabCheckOutActivity.this,
myDateListener, calender.get(Calendar.YEAR), calender.get(Calendar.MONTH),
calender.get(Calendar.DAY_OF_MONTH)+1);
pickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()-1000);
pickerDialog.show();
by Using this code, in dialog date is pointed to tomorrow but user can also select todays date.I want user can select date from tomorrow not today.
public class CustomDatePickerDialog extends DatePickerDialog {
int maxYear;
int maxMonth;
int maxDay;
public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
}
public void setMaxDate(long maxDate) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
getDatePicker().setMaxDate(System.currentTimeMillis());
} else {
final Calendar c = Calendar.getInstance();
c.setTimeInMillis(maxDate);
maxYear = c.get(Calendar.YEAR);
maxMonth = c.get(Calendar.MONTH);
maxDay = c.get(Calendar.DAY_OF_MONTH);
}
}
#Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
super.onDateChanged(view, year, monthOfYear, dayOfMonth);
} else {
if (year > maxYear)
view.updateDate(maxYear, maxMonth, maxDay);
if (monthOfYear > maxMonth && year == maxYear)
view.updateDate(maxYear, maxMonth, maxDay);
if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
view.updateDate(maxYear, maxMonth, maxDay);
}
}
}
Use
pickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()+24*60*60*1000);//where 24*60*60*1000 represents the total timestamp for one day
instead of
pickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()-1000);
Please see complete implementation below:
DialogFragment class
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener
{
public DatePickerFragment()
{
}
public void setiDateTimeListener(IDateTimeListener iDateTimeListener)
{
this.iDateTimeListener = iDateTimeListener;
}
#Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
// Set minimum date as tommorw
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() + 24*60*60*1000);
// If need to set max date then use this also
// datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
// Create a new instance of DatePickerDialog and return it
return datePickerDialog;
}
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
try
{
String selectedDt = dayOfMonth+"-"+(monthOfYear + 1)+"-"+year;
iDateTimeListener.onDateSet(selectedDt);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Interface must be implemented in date picker calling class
public interface IDateTimeListener
{
public void onDateSet(String date);
}
Calling dialog fragment
public void showDatePickerDialog()
{
DatePickerFragment datePickerFragment = new DatePickerFragment();
datePickerFragment.setiDateTimeListener(this);
datePickerFragment.show(getActivity().getSupportFragmentManager(),"datePicker");
}
if (CustomVerticalCalendarView.isPreviousDateDisabled()) { // disable previous date disable flow
int daysOfYear = listCalender.get(Calendar.DAY_OF_YEAR);
int currentDate = today.get(Calendar.DAY_OF_YEAR);
int listYear = listCalender.get(Calendar.YEAR);
int currentYear = today.get(Calendar.YEAR);
if (daysOfYear < currentDate || listYear < currentYear) {
checkBox.setEnabled(false);
checkBox.setTextColor(ContextCompat.getColor(checkBox.getContext(), R.color.dark_gray));
}
}
Hope this code helps you.
I want to use the calendarDaysBetween() below method in my TextView, or I want my TextView to display difference of two dates. Can anyone help me with this?
public class MainActivity extends FragmentActivity {
static EditText metTodate, metFromdate, metInTime, metOutTime;
static long no_of_days1;
static long no_of_days2;
Button mbtnApplyLeave;
ImageView mivBack;
RadioButton halfday1, halfday2, first_half, second_half, first_half1, second_half1, full_day1, full_day2;
static TextView no_of_days;
static TextView no_of_days3;
public static String str;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
metTodate = (EditText)findViewById(R.id.etTodate);
metFromdate = (EditText)findViewById(R.id.etFromdate);
metInTime = (EditText)findViewById(R.id.etInTime);
metOutTime = (EditText)findViewById(R.id.etOutTime);
mivBack = (ImageView)findViewById(R.id.ivBack);
halfday1 = (RadioButton)findViewById(R.id.halfday1);
halfday2 = (RadioButton)findViewById(R.id.halfday2);
first_half = (RadioButton)findViewById(R.id.firsthalf1);
second_half = (RadioButton)findViewById(R.id.secondhalf1);
first_half1 = (RadioButton)findViewById(R.id.firsthalf2);
second_half1 = (RadioButton)findViewById(R.id.secondhalf2);
full_day1 = (RadioButton)findViewById(R.id.fullday1);
full_day2 = (RadioButton)findViewById(R.id.fullday2);
no_of_days = (TextView)findViewById(R.id.etnoofdays);
// Here is my method where I want my text view to display dates.
no_of_days.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
calendarDaysBetween(Calendar metFromdate, Calendar metTodate);
}
});
}
// Both date picker dialogs
public void showTruitonDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
metTodate.setText(day + "/" + (month + 1) + "/" + year);
}
}
public void showFromDatePickerDialog(View v) {
DialogFragment newFragment = new FromDatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public static class FromDatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
#Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c1 = Calendar.getInstance();
int year = c1.get(Calendar.YEAR);
int month = c1.get(Calendar.MONTH);
int day1 = c1.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day1);
// calendarDaysBetween(Calendar metFromdate, Calendar metTodate);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
metFromdate.setText(day + "/" + (month + 1) + "/" + year);
}
}
public static long calendarDaysBetween(Calendar metFromdate, Calendar metTodate) {
// Create copies so we don't update the original calendars.
Calendar start = Calendar.getInstance();
start.setTimeZone(metFromdate.getTimeZone());
start.setTimeInMillis(metFromdate.getTimeInMillis());
Calendar end = Calendar.getInstance();
end.setTimeZone(metTodate.getTimeZone());
end.setTimeInMillis(metTodate.getTimeInMillis());
// Set the copies to be at midnight, but keep the day information.
start.set(Calendar.HOUR_OF_DAY, 0);
start.set(Calendar.MINUTE, 0);
start.set(Calendar.SECOND, 0);
start.set(Calendar.MILLISECOND, 0);
end.set(Calendar.HOUR_OF_DAY, 0);
end.set(Calendar.MINUTE, 0);
end.set(Calendar.SECOND, 0);
end.set(Calendar.MILLISECOND, 0);
// At this point, each calendar is set to midnight on
// their respective days. Now use TimeUnit.MILLISECONDS to
// compute the number of full days between the two of them.
no_of_days1 = TimeUnit.MILLISECONDS.toDays(Math.abs(end.getTimeInMillis() - start.getTimeInMillis()));
String finalresult = new Double(no_of_days1).toString();
no_of_days.setText(finalresult);
return no_of_days1;
}
}
try this
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date past = format.parse("05/06/2015");
Date now = new Date();
System.out.println(TimeUnit.MILLISECONDS.toMinutes(now.getTime() - past.getTime()) + " minutes ago");
System.out.println(TimeUnit.MILLISECONDS.toHours(now.getTime() - past.getTime()) + " hours ago");
System.out.println(TimeUnit.MILLISECONDS.toDays(now.getTime() - past.getTime()) + " days ago");
It will give you difference in minute and hours also from current date, you can use your own date format and own date objects
You can use the following code to get a date difference in number of days.
public void calendarDaysBetween(Calendar metFromdate, Calendar etTodate)
{
long diff = (metFromdate.getTimeInMillis() - metTodate.getTimeInMillis());
long no_of_days1 = Math.abs(TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
no_of_days.setText(no_of_days1+"");
}
First declear Calendar object
public Calendar metFromdate= Calendar.getInstance();
public Calendar metTodate== Calendar.getInstance();
Change first DatePicker values
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
metFromdate.set(Calendar.YEAR, year);
metFromdate.set(Calendar.MONTH, month);
metFromdate.set(Calendar.DAY_OF_MONTH, day);
}
change second DatePicker values
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
metTodate.set(Calendar.YEAR, year);
metTodate.set(Calendar.MONTH, month);
metTodate.set(Calendar.DAY_OF_MONTH, day);
}
change button click
no_of_days.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
calendarDaysBetween(metFromdate, metTodate);
}
});
you used it
Calendar date1 = Calendar.getInstance(); Calendar date2 =
Calendar.getInstance();
date1.clear();
date1.set(datePicker1.getYear(),datePicker1.getMonth(),datePicker1.getDayOfMonth());
date2.clear();
date2.set(datePicker2.getYear(),datePicker2.getMonth(),datePicker2.getDayOfMonth());
long diff = date2.getTimeInMillis() - date1.getTimeInMillis();
float dayCount = (float) diff / (24 * 60 * 60 * 1000);
textView.setText(Long.toString(diff) + " " + (int) dayCount);
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
........
........
compile 'joda-time:joda-time:2.2'
}
and
public String getTimeAgo(long ago){
DateTime timeAgo = new DateTime(ago*1000L);
DateTime now = new DateTime();
Period period = new Period(timeAgo, now);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendYears().appendSuffix(" Years, ")
.appendMonths().appendSuffix(" Months, ")
.appendWeeks().appendSuffix(" Weeks, ")
.appendDays().appendSuffix(" Days, ")
.appendHours().appendSuffix(" Hours, ")
.appendMinutes().appendSuffix(" Minutes, ")
.appendSeconds().appendSuffix(" Seconds ago ")
.printZeroNever()
.toFormatter();
String elapsed = formatter.print(period);
return elapsed;
}
and
yourTextView.setText(getTimeAgo(long-your_past_date_millis));
How could i do this?
This is my code:
private void setDateTimeField () {
Calendar newCalendar = Calendar.getInstance();
mDatePickerDialog = new DatePickerDialog(AddBirthday.this, new OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, monthOfYear, dayOfMonth);
addBirthdayDate.setText(dateFormatter.format(newDate.getTime()));
dateSelected = String.valueOf(dayOfMonth) + " /" + String.valueOf(monthOfYear + 1)
+ " /" + String.valueOf(year);
}
}, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));
}
I would like now to calculate when is birthday of user when he chose the date in DatePickerDialog and storing it in integer type.
You could try with an easier code like this for example:
private int mDay;
private int mMonth;
private int mYear;
private EditText date;
private Calendar c = new Calendar();
...
//and in your onCreate method:
date = (EditText)findViewById(R.id.date_of_birth_as_text);
date.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(DATE_DIALOG_ID); //DATE_DIALOG_ID is the id of your DatePickerDialog - declared in your layout file
}
});
//default values of the year, month and date - will be changed after click on the EditText view
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
updateDisplay();
protected Dialog onCreateDialog(int id) {
switch(id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
}
return null;
}
private DatePickerDialog.OnDateSetListener mDateSetListener= new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, monthOfYear);
c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
updateDisplay();
}
};
private void updateDisplay() {
Date currentDate = new Date();
int age = currentDate.getYear() - mYear;
date.setText( new StringBuilder().append("The user is ")
.append(age).append(" years old"));
}
int age = getCurrentYear() -datePicker.getYear() ;
When I run and click the button, it does not open the datapicker dialogbox. I am not able to find out what is incorrect. Please, any one can check and guide me where is the incorrect code in the program.
{
//Declaration for class
ButtonViews views;
dpListener dpListenerView;
// Declartion for member vairables
int day, month, x_year;
int hour;
int minute;
Calendar calendar;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
views = new ButtonViews();
dpListenerView = new dpListener();
//ButtonListener
views.button_date.setOnClickListener(this);
views.button_time.setOnClickListener(this);
//
// pick up the default date using Calender class
calendar = GregorianCalendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.getDefault());
day = calendar.get(Calendar.DAY_OF_MONTH);
month = calendar.get(Calendar.MONTH);
x_year = calendar.get(Calendar.YEAR);
Log.i("DAY in Num....."," "+ month);
hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);
setupDate(day, month, x_year);
setupTime(hour, minute);
}
#Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_date:
showDatePickerDialog();
break;
case R.id.button_time:
showTimePickerDialog();
break;
}
}
private void setupTime(int hours, int minutes) {
views.button_time.setText(hours + ":" + minutes);
}
private void setupDate(int day, int month, int year) {
String strMonth = ((month+1) <=9) ? ("0" + (month+1)) : String.valueOf(month+1);
views.button_date.setText(String.valueOf(day) + "/" + strMonth + "/" + String.valueOf(year));
}
private void showDatePickerDialog() {
DatePickerDialog datepickerdialog = new DatePickerDialog
(
this,
dpListenerView,
/* new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
} },*/
//this,
x_year,
month,
day
);
}
/* private OnDateSetListener dpListener = new OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
*//* day = dayOfMonth;
month = monthOfYear;
x_year = year;*//*
setupDate(dayOfMonth,monthOfYear,year);
}
};*/
public void showTimePickerDialog() {
TimePickerDialog timePickerDialog = new TimePickerDialog(
DateTimePickerActivity.this,
this,
hour,
minute,
true
);
calendar.set(Calendar.HOUR, hour);
calendar.set(Calendar.MINUTE, minute);
timePickerDialog.show();
}
// #Override
// public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// setupDate(dayOfMonth,monthOfYear,year);
// }
#Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
setupTime(hourOfDay, minute);
}
class ButtonViews {
Button button_time;
Button button_date;
public ButtonViews() {
button_date = (Button) findViewById(R.id.button_date);
button_time = (Button) findViewById(R.id.button_time);
}
}
class dpListener implements OnDateSetListener
{
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
/* day = dayOfMonth;
month = monthOfYear;
x_year = year;*/
setupDate(dayOfMonth,monthOfYear,year);
}
}
}
#Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_date:
showDialog(999);// Method for Show Dialog. You can use any Int
break;
case R.id.button_time:
showDialog(99);
break;
}
}
and Define this method for Identified dialog from int.
#Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
if (id == 999) {
return new DatePickerDialog(this, myDateListener, yr, month, day);
} else if (id == 99) {
return new TimePickerDialog(this, myTimeListener, h, m, true);
}
return null;
}
And there Listeners
// For Date Picker
private DatePickerDialog.OnDateSetListener myDateListener = new OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
day = dayOfMonth;
month = monthOfYear + 1;
yr = year;
Toast.makeText(
MainActivity.this,
new StringBuilder().append(day).append("-").append(month)
.append("-").append(yr), Toast.LENGTH_LONG).show();
}
};
// For TimePicker
private TimePickerDialog.OnTimeSetListener myTimeListener = new OnTimeSetListener() {
#Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
h = hourOfDay;
m = minute;
Toast.makeText(MainActivity.this,
new StringBuilder().append(h).append(":").append(m),
Toast.LENGTH_LONG).show();
}
};