我使用两个函数来比较日期值,我将检查开始日期是否大于/来自结束日期。
第一个函数用于获取字符串值并使用该字符串值初始化Calendar
:
private int getFromCalendar(String strDate,int field)
{
int result = -1;
try
{
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");// this is your date format "12/24/2013" = "MM/dd/yyy"
java.util.Date date = formatter.parse(strDate);//convert to date
Calendar cal = Calendar.getInstance();// get calendar instance
cal.setTime(date);//set the calendar date to your date
result = cal.get(field); // get the required field
return result;//return the result.
}
catch (ParseException e)
{
e.printStackTrace();
}
return result;
}
第二个函数用于比较startDate和endDate(它们都是按钮):
public void compareDates(String startDate, String endDate){
Calendar startCheckDate = Calendar.getInstance();
int startmm = getFromCalendar(monitoringDate.getText().toString(), Calendar.MONTH);
int startyy = getFromCalendar(monitoringDate.getText().toString(), Calendar.YEAR);
int startdd = getFromCalendar(monitoringDate.getText().toString(), Calendar.DAY_OF_MONTH);
startCheckDate.set(startyy, startmm, startdd);
Calendar endCheckDate = Calendar.getInstance();
int endmm = getFromCalendar(monitoringEndDate.getText().toString(), Calendar.MONTH);
int endyy = getFromCalendar(monitoringEndDate.getText().toString(), Calendar.YEAR);
int enddd = getFromCalendar(monitoringEndDate.getText().toString(), Calendar.DAY_OF_MONTH);
endCheckDate.set(endyy, endmm, enddd);
if(endCheckDate.after(startCheckDate)){
Toast.makeText(getSherlockActivity(), "End date cannot be smaller than start date", Toast.LENGTH_SHORT).show();
}
}
由于某种原因,compareDates
功能根本不起作用。请帮忙
答案 0 :(得分:3)
您可以通过将日期更改为自1900年以来的毫秒来轻松比较日期
Date date = new Date();
long dateLong = date.getTime();
现在很容易与其他任何日期进行比较
因此,对于您的情况,这样做后回到日期DataType
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");// this is your date format "12/24/2013" = "MM/dd/yyy"
java.util.Date date = formatter.parse(strDate);
做类似
的事情long date1long = date1.getTime();
long date2long = date2.getTime();
if(date2long > date1long)
{
// Do whatever you want
}
答案 1 :(得分:1)
你是详细的。因为您只想知道给定日期是否在另一个之后。你走了:
public class DateTest {
private static SimpleDateFormat formatter = new SimpleDateFormat(
"MM/dd/yyyy");
public static void main(String[] args) throws ParseException {
Calendar start = createFromString("01/30/2013");
Calendar end = createFromString("06/30/2013");
System.out.println("START: " + start.getTime());
System.out.println("END : " + end.getTime());
System.out.println("IS B4: " + isBefore(start, end));
}
public static Calendar createFromString(String date) throws ParseException {
Calendar c = Calendar.getInstance();
c.setTime(formatter.parse(date));
return c;
}
public static boolean isBefore(Calendar start, Calendar end) {
return start.before(end);
}
}
<强>输出强>
START:2013年1月30日星期三00:00:00 CET 2013年 结束:Sun Jun 30 00:00:00 CEST 2013
IS B4:是的
我在getTime()
方法中使用了println()
,因为toString()
上的java.util.Date
方法(被隐式调用)比Calendar
中的方法更具人性化}}
日历中还有after()
和compareTo()
。
答案 2 :(得分:0)
if(endCheckDate.compareTo(startCheckDate)<0)
而不是
if(endCheckDate.after(startCheckDate))
了解更多参考资料go here