I have a typeconverter that goes like this
public class DateConverter {
#TypeConverter
public static Date convertLongToDate(Long dateLong) {
return dateLong == null ? null : new Date(dateLong);
}
#TypeConverter
public static Long convertDateToLong(Date date) {
return date == null ? null : date.getTime();
}
...
}
And I use it in my database
#Database(entities = { LoginEntity.class,
Transaction.class,
UnsentTagNumbers.class }, version = 11, exportSchema = false)
#TypeConverters(DateConverter.class)
public abstract class ApplicationDatabase extends RoomDatabase {
public abstract LoginDao loginDao();
...
}
In inserting the transaction to the database, I do it like so.
public void recordTransaction() {
transaction.setTransactionDate(Calendar.getInstance().getTime()); <==== Please take note on the way that I use the current date.
transaction.setTransactionType(getApplication().getString(R.string.exit_scan));
...
transactionRepository.insert(transaction);
}
In my DAO
#Query("SELECT * FROM TRANSACTION_TABLE WHERE transactionDate >= :fromDate AND transactionDate <= :toDate AND staffId = :staffId")
LiveData<List<Transaction>> getTransactionSummaryByDates(Date fromDate, Date toDate, String staffId);
This is how I search for the transactions by dates
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnStartDate:
if(!hasSelectedStaffId) {
Toast.makeText(this, "Select a staff id first.", Toast.LENGTH_SHORT).show();
return;
}
Calendar cldr = Calendar.getInstance();
int day = cldr.get(Calendar.DAY_OF_MONTH);
int month = cldr.get(Calendar.MONTH);
int year = cldr.get(Calendar.YEAR);
dpdStartDate = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
hasSelectedStartDate = true;
startDate = new Date(year, monthOfYear, dayOfMonth, 0, 0, 0);
btnStartDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
}
}, year, month, day);
dpdStartDate.show();
break;
case R.id.btnEndDate:
cldr = Calendar.getInstance();
day = cldr.get(Calendar.DAY_OF_MONTH);
month = cldr.get(Calendar.MONTH);
year = cldr.get(Calendar.YEAR);
dpdEndDate = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
endDate = new Date(year, monthOfYear, dayOfMonth, 23, 59, 59);
btnEndDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
if (hasSelectedStartDate && hasSelectedStaffId) {
viewModel.getTransactions(startDate, endDate, selectedStaffId);
transactionAdapter.setTransactionList(transactionList);
transactionAdapter.notifyDataSetChanged();
}
}
}, year, month, day);
dpdEndDate.show();
break;
}
}
And this is in my viewmodel to get the transactions
public void getTransactions(Date startDate, Date endDate, String staffId) {
transactionList = transactionRepository.getTransactionSummaryByDates(startDate, endDate, staffId);
}
How come, I do not get any information from the database? If I check my database, the transactions are recorded. Please see image.
This is the parameters I send so I can get via dates
startDate: Wed Jan 25 00:00:00 GMT+08:00 3922
endDate: Thu Jan 26 23:59:59 GMT+08:00 3922
staffId: 10164
But if I convert my dates that I get from the datepicker to epoch like this:
if (hasSelectedStartDate && hasSelectedStaffId) {
Long lStartDate = startDate.getTime();
Long lEndDate = endDate.getTime();
viewModel.getTransactions(lStartDate, lEndDate, selectedStaffId);
//viewModel.getTransactions(startDate, endDate, selectedStaffId);
//setupTransactionList();
}
I've noticed that in my database, the date is 16431... But when I query and I convert my date parameters, it is 6060....
How do I make this right?
The mistake I had was in the codes of my onClick(View ...). I just converted my Date Pickers to Calendar and got the time from it like so..
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnStartDate:
if(!hasSelectedStaffId) {
Toast.makeText(this, "Select a staff id first.", Toast.LENGTH_SHORT).show();
return;
}
Calendar cldr = Calendar.getInstance();
int day = cldr.get(Calendar.DAY_OF_MONTH);
int month = cldr.get(Calendar.MONTH);
int year = cldr.get(Calendar.YEAR);
dpdStartDate = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
hasSelectedStartDate = true;
cldr.set(year, monthOfYear, dayOfMonth, 23, 59, 59);
startDate = cldr.getTime(); //new Date(year, monthOfYear, dayOfMonth, 0, 0, 0);
btnStartDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
}
}, year, month, day);
dpdStartDate.show();
break;
case R.id.btnEndDate:
if(!hasSelectedStaffId) {
Toast.makeText(this, "Select a staff id first.", Toast.LENGTH_LONG).show();
return;
}
if(!hasSelectedStartDate) {
Toast.makeText(this, "Select a start date first.", Toast.LENGTH_LONG).show();
return;
}
cldr = Calendar.getInstance();
day = cldr.get(Calendar.DAY_OF_MONTH);
month = cldr.get(Calendar.MONTH);
year = cldr.get(Calendar.YEAR);
dpdEndDate = new DatePickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
cldr.set(year, monthOfYear, dayOfMonth, 23, 59, 59);
endDate = cldr.getTime();
btnEndDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
if (hasSelectedStartDate && hasSelectedStaffId) {
viewModel.getTransactions(startDate, endDate, selectedStaffId);
setupTransactionList();
}
}
}, year, month, day);
dpdEndDate.show();
break;
}
}
The endDate = new Date(year, monthOfYear, dayOfMonth, 23, 59, 59); had a different format so since I was using the "Calendar" instance when saving, I figured that it should have been a "Calendar" instance that I should be passing as parameters.
Related
I have a datePicker that I want to display in the editText when I take the date from it, it has the wrong format.
For example, I
Jan / 01/2020
I choose.
But inside text editing
It shows 2020/0/1 instead of 2020/01/01
open datePicker:
new SpinnerDatePickerDialogBuilder()
.context(AddProjectActivity.this)
.callback(AddProjectActivity.this)
.spinnerTheme(R.style.NumberPickerStyle)
.showTitle(true)
.showDaySpinner(true)
.defaultDate(2017, 0, 1)
.maxDate(2100, 0, 1)
.minDate(2020, 0, 1)
.build()
.show();
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
meEdtDate.setText(year + "/" + monthOfYear + "/" + dayOfMonth);
date = getDate(year, monthOfYear, dayOfMonth);
}
private Date getDate(int year, int monthOfYear, int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, monthOfYear, dayOfMonth);
return calendar.getTime();
}
set date to editText:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
String dateStr = simpleDateFormat.format(projectEntity.getDate());
meEdtDate.setText(dateStr);
Here is a solution using classes from the current package, java.time, for date handling.
You can create a LocalDate from year, month and day like this
private static LocalDate getDate(int year, int monthOfYear, int dayOfMonth) {
return LocalDate.of(year, monthOfYear, dayOfMonth);
}
And then format it into a String like this
LocalDate date = getDate(2020, 1, 1);
String dateString = date.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
How can I set date in a DatePicker from a string (eg: 02/10/19):
Following is the code:
iqp_editDate.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
new DatePickerDialog(ActivityClass.this, (DatePickerDialog.OnDateSetListener) date1, y, m, d).show();
}
});
DatePickerDialog.OnDateSetListener date1 = new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
y = year;
m = month;
d = dayOfMonth;
dateMonth = month + 1;
dateYear = year;
}
};
Update: misunderstood the question:
Calendar cal = Calendar.getInstance()
cal.set(Calendar.HOUR_OF_DAY,18);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.DATE,2);
cal.set(Calendar.MONTH,9); //Month -1
//Or to set it from a String:
String string = "02/10/19";
DateFormat format = new SimpleDateFormat("dd/MM/yy", Locale.getDefault());
Date date = format.parse(string);
cal.setTimeInMillis(date.getTime());
new DatePickerDialog(getContext(),date1, cal
.get(Calendar.YEAR), cal .get(Calendar.MONTH),
cal .get(Calendar.DAY_OF_MONTH)).show();
A string is a character array. Meaning that you could just make a loop and set the different day, month and year values to different parts of the string.
String date = "02/19/19";
String year = "";
for(int i = 0; i < date.length; i++)
{
month += date.charAt(i);
...
}
Then you'd tell it when to switch from adding to month to day to year when it encounters '/'
if(date.charAt(i) == '/')
{
...
}
at the end of it all if you need to make it into an int then do
int month = Integer.parseInt("month");
sorry I've gotta be going somewhere so I couldn't just write the code out for ya but I'm sure you can figure it out from what I gave ya.
Following code works fine for me:
new DatePickerDialog(Activityclass.this, date1, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)).show();
DatePickerDialog.OnDateSetListener date1 = new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
view.setMinDate(1559327400);
y = year;
m = month;
d = dayOfMonth;
dateMonth = month + 1;
dateYear = year;
iqp_editDate.setText(dayOfMonth + "/" + (month + 1) + "/" + year);
try {
epoch = new java.text.SimpleDateFormat("MM/dd/yyyy").parse(m + "/" + dayOfMonth + "/" + year).getTime() / 1000;
} catch (ParseException e) {
e.printStackTrace();
}
}
};
I have a couple of requirement, I need to validate if today's date is matching with a condition and if true create records in DB.
but the condition is something like this - biweekly Tuesday, biweekly Thursday.
Can anybody provide how to achieve this?
private static Calendar cacheCalendar;
public static LocalDate getNDayOfMonth(int dayweek, int nthweek, int month, int year) {
LocalDate d = new LocalDate(year, month, 1).withDayOfWeek(dayweek);
if (d.getMonthOfYear() != month)
d = d.plusWeeks(1);
return d.plusWeeks(nthweek - 1);
}
public static LocalDate getLastWeekdayOfMonth(int dayweek, int month, int year) {
LocalDate d = new LocalDate(year, month, 1).plusMonths(1).withDayOfWeek(dayweek);
if (d.getMonthOfYear() != month)
d = d.minusWeeks(1);
return d;
}
public static void main(String[] args) {
cacheCalendar = Calendar.getInstance();
for (int i = 1; i < 13; i++) {
// second wednesday of oct-2011
LocalDate secondMonday = getNDayOfMonth(DateTimeConstants.MONDAY, 2, i, cacheCalendar.get(Calendar.YEAR));
System.out.println("secondMonday= " + secondMonday);
LocalDate secondTuesday = getNDayOfMonth(DateTimeConstants.TUESDAY, 2, i,
cacheCalendar.get(Calendar.YEAR));
System.out.println("secondTuesday= " + secondTuesday);
LocalDate monthlyTuesday = getNDayOfMonth(DateTimeConstants.TUESDAY, 1, i,
cacheCalendar.get(Calendar.YEAR));
System.out.println("monthlyTuesday= " + monthlyTuesday);
LocalDate weeklyFirstFriday = getNDayOfMonth(DateTimeConstants.FRIDAY, 1, i,
cacheCalendar.get(Calendar.YEAR));
System.out.println("weeklyFirstFriday= " + weeklyFirstFriday);
}
}
UPDATE
I am creating a pregnancy due date countdown, so I use android.widget.DatePicker as a tool to set the due date.
For example:
the set due date is Jan. 9 2015
the date now is Nov. 9 2014
so the left months, days and weeks is 2 months, 62 days and 8weeks
So far i can only display the set due date.
Question:
How to get the exact months weeks and days left when the user set the due date.
UPDATE CODE
Here's the code:
private TextView txtResultDueDate ;
private DatePicker datePicker;
private Calendar calendar;
private int year;
private int month;
private int day;
static final int DATE_DIALOG_ID = 999;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
txtResultDueDate = (TextView) findViewById(R.id.txtDue);
btnChangeDate = (Button)findViewById(R.id.button1);
calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
showDate(year, month+1, day);
#SuppressWarnings("deprecation")
public void setDate(View view) {
showDialog(999);
Toast.makeText(getApplicationContext(), "ca", Toast.LENGTH_SHORT)
.show();
}
#Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
if (id == 999) {
return new DatePickerDialog(this, myDateListener, year, month, day);
}
return null;
}
private DatePickerDialog.OnDateSetListener myDateListener
= new DatePickerDialog.OnDateSetListener() {
#Override
public void onDateSet(DatePicker arg0, int year, int month, int day) {
Chronology chrono = GregorianChronology.getInstance();
DateTime end = new DateTime(arg0.getYear(), arg0.getMonth(), arg0.getDayOfMonth(), 0, 0, chrono);
DateTime current = new DateTime();
Interval interval = new Interval(current.toInstant(), end.toInstant());
Period duePeriod = interval.toPeriod();
showDate(duePeriod.getYears(), duePeriod.getMonths(), duePeriod.getDays());
}
};
private void showDate(int year, int month, int day) {
txtResultDueDate.setText(new StringBuilder().append(day).append("/")
.append(month).append("/").append(year));
}
This is the error that I encounter when I set the due date using DatePicker:
FATAL EXCEPTION: main
java.lang.IllegalArgumentException: The end instant must be greater orequal to the start
at org.joda.time.base.Abstraction.checkInterval(AbstractInterval.java.63)
at org.joda.time.base.BaseInterval(BaseInterval.java:94)
at org.joda.time.Interval.(Interval.java.122)
at com.date.androin.Profile$1.onDataset(Profile.java:168)
at android.app.DatePickerDialog.tryNotifyDataSet(DatePickerDialog.java.148)
at android.app.DatePickerDialog.onClick(DatePickerDialog.java.116)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStrat.main(Native Method)
There is a library Joda Time. It is better the Date API provided by Java
Joda Time has a concept of time Interval:
Interval interval = new Interval(oldTime, new Instant());
Yes, you can use joda lib with android DatePicker
Chronology chrono = GregorianChronology.getInstance();
// end datetime
DateTime end = new DateTime(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), 0, 0 ,chrono);
// current datetime
DateTime current = new DateTime();
Then instantiate Interval with start and end datetime
Interval interval = new Interval(current.toInstant(), end.toInstant());
then use the Interval api to get the Period from which you can extract the difference of months/days/weeks
Period duePeriod = interval.toPeriod();
// get difference in months
duePeriod.getMonths();
// get difference in weeks
duePeriod.getWeeks();
PLease refer the below Javadoc of Period for complete list of API
http://joda-time.sourceforge.net/apidocs/org/joda/time/Period.html
For Android, in your case add the above code into your DatePicker onDateSet listener. finally the listener method would like this,
#Override
public void onDateSet(DatePicker arg0, int year, int month, int day) {
// TODO Auto-generated method stub
Chronology chrono = GregorianChronology.getInstance();
// end datetime
DateTime end = new DateTime(arg0.getYear(), arg0.getMonth(), arg0.getDayOfMonth(), 0, 0, chrono);
// current datetime
DateTime current = new DateTime();
Interval interval = new Interval(current.toInstant(), end.toInstant());
Period duePeriod = interval.toPeriod();
showDate(duePeriod.getYears(), duePeriod.getMonths(), duePeriod.getDays());
}
//somewhere in your code, init part
Calendar then = setDate(9, 0, 2015);//9 january 2015
Calendar c = Calendar.getInstance();
Calendar now = setDate(c.get(Calendar.DAY_OF_MONTH), c.get(Calendar.MONTH), c.get(Calendar.YEAR));
String leftDays = getLeftDays(then, now);//your result
//method setting days months years - we ignore hours and minutes
private String getLeftDays(Calendar then, Calendar now) {
long leftMilis = then.getTimeInMillis() - now.getTimeInMillis();
int seconds = (int) (leftMilis / 1000);
Log.d(TAG, "seconds:" + seconds);
int minutes = seconds / 60;
Log.d(TAG, "minutes:" + minutes);
int hours = minutes / 60;
Log.d(TAG, "hours:" + hours);
int days = hours / 24;
Log.d(TAG, "days:" + days);
int weeks = days / 7;
Log.d(TAG, "weeks:" + weeks);
//months.. another way calculating data due not equal amount of days per month
Calendar temp = ((Calendar) then.clone());
temp.add(Calendar.MONTH, -now.get(Calendar.MONTH));
int months = temp.get(Calendar.MONTH);
Log.d(TAG, "months:" + months);
StringBuilder sb = new StringBuilder();
String format = "%d months, %d days, %d weeks";
String formatStr = String.format(format, months, days, weeks);
String result = sb.append(formatStr).toString();
Log.d(TAG, sb.toString());
return result;
}
private Calendar setDate(int day, int month, int year) {
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, day);
c.set(Calendar.MONTH, month);
c.set(Calendar.YEAR, year);
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
Log.d(TAG, c.getTime().toString());
return c;
}
Calendar c = calendar.getInstance();
and DatePickerDialog d
#Override
public void onDateSet(DatePicker view,int Year,int mont of Year,int day of month){
Toast
c.get(Calendar.Year),c.get(Calendar.Month),c.get(Calendar.Day_of_Month);
d.show
this code is to find week from selected date,it's proper work.
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date1.clear();
date1.set(Integer.parseInt(selected_year), Integer.parseInt(selected_month), Integer.parseInt(selected_date)); // set date 1 (yyyy,mm,dd)
System.out.println("Selected Date==>>" + date1);
date2.clear();
date2.set(Integer.parseInt(current_year), Integer.parseInt(current_month), Integer.parseInt(current_date));
System.out.println("Current Date==>>" + date2);
long diff = date2.getTimeInMillis() - date1.getTimeInMillis();
float dayCount = (float) diff / (24 * 60 * 60 * 1000);
week = (int) (dayCount / 7);
if (week <= 0) {
Toast.makeText(this, "Sry System Error", Toast.LENGTH_SHORT).show();
System.out.println("Week==>>" + week);
test = false;
} else {
Toast.makeText(this, "Done", Toast.LENGTH_SHORT).show();
System.out.println("Week==>>" + week);
test = true;
}
I have created an activity in which there is a field for inserting birth date of the user. I have used a date picker to achieve this.
This is the source code of what I am doing:
// onclick dob edittext open date picker dialog
dob.setFocusableInTouchMode(false);
dob.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
//open date picker
showDialog(DATE_DIALOG_ID);
}
});
//======================For picking birth day==========================
// Creating dialog
#Override
protected Dialog onCreateDialog(int id) {
Calendar c = Calendar.getInstance();
int cyear = c.get(Calendar.YEAR);
int cmonth = c.get(Calendar.MONTH);
int cday = c.get(Calendar.DAY_OF_MONTH);
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, cyear, cmonth, cday);
}
return null;
}
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
// onDateSet method
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// String date_selected = String.valueOf(monthOfYear+1)+" /"
// +String.valueOf(dayOfMonth)+" /"
// +String.valueOf(year);
String date_selected = String.valueOf(dayOfMonth)+" /"
+String.valueOf(monthOfYear+1)+" /"
+String.valueOf(year);
//Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
dob.setText(date_selected);
}
};
//======================For picking birth day==========================
Now what I want to do is, to limit the date picker to particular year.
Like this:
int maxYear = c.get(Calendar.YEAR) - 15; // this year ( 2013 ) - 15 = 1998
int maxMonth = c.get(Calendar.MONTH);
int maxDay = c.get(Calendar.DAY_OF_MONTH);
int minYear = maxYear-49;
int minMonth = 0; // january
int minDay = 25;
What should I do to set the above mentioned bounding to the date picker?
//----------------Edit---------------------------
I have done something like this:
//======================For picking birth day==========================
// Creating dialog
#Override
protected Dialog onCreateDialog(int id) {
Calendar c = Calendar.getInstance();
maxYear = c.get(Calendar.YEAR) - 15; // this year ( 2013 ) - 15 = 1998
maxMonth = c.get(Calendar.MONTH);
maxDay = c.get(Calendar.DAY_OF_MONTH);
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, maxYear, maxMonth, maxDay);
}
return null;
}
DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
int minYear = maxYear-49;
int minMonth = 0; // january
int minDay = 25;
public void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
Date current = new Date(year, monthOfYear, dayOfMonth);
Date minDate = new Date(minYear, minMonth, minDay);
Date maxDate = new Date(maxYear, maxMonth, maxDay);
if( current.getTime() < minDate.getTime() )
{
//set to minimum date
}else if( current.getTime() > maxDate.getTime() )
{
//Set to max Date
}
}
#Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
String date_selected = String.valueOf(dayOfMonth)+" /"
+String.valueOf(monthOfYear+1)+" /"
+String.valueOf(year);
//Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
dob.setText(date_selected);
}
};
//======================For picking birth day==========================
This is fixing the upper limit, but the lower limit or the minDate is not getting fixed! What is to be done?
Set OnDateChangedListener() For you DatePicker and inside onDateChanged function if the date set is greater than the decide limit if so DatePicker.updateDate(minYear, minMonth, minDay); use this method to reset it.
Date minDate = new Date(1990, 10, 25);
Date maxDate = new Date(2013, 4, 15);
OnDateChangedListener listener = new OnDateChangedListener() {
#Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Date current = new Date(year, monthOfYear, dayOfMonth);
if( current.getTime() < minDate.getTime() )
{
//set to minimum date
}else if( current.getTime() > maxDate.getTime() )
{
//Set to max Date
}
}
};
YourDatePicker.init(2013, 4, 15, listener);