在我的Android应用程序中,有一个用户定义的日期。此日期应大于或等于系统日期。如果是,则进程将继续。如果不是,则表示敬意跟进日期应大于或等于系统日期。
我使用了这段代码。
if (sys_date.after(df.parse((date.getText().toString())))) {
Toast.makeText(getActivity(), "Follow up date should be greater than or equal to system date", Toast.LENGTH_SHORT).show();
} else {
//process will continue
}
但问题在于:即使用户定义的日期等于系统日期,它也会提供Toast消息。
任何人都可以如此友好地解释这里发生了什么,我该如何解决这个问题。
提前完成
答案 0 :(得分:4)
我正在使用此
public static boolean isAfterToday(int year, int month, int day)
{
Calendar today = Calendar.getInstance();
Calendar myDate = Calendar.getInstance();
myDate.set(year, month, day);
if (myDate.before(today))
{
return false;
}
return true;
}
答案 1 :(得分:2)
我已经使这个方法验证了所有可能的日期验证。它可以帮助你。
public static final int DATE_EQUAL_TO_TODAY = 1;
public static final int DATE_EQUAL_TO_GREATER_THAN_TODAY = 2;
public static final int DATE_EQUAL_TO_LESS_THAN_TODAY = 3;
public static final int END_DATE_GREATER_OR_EQUAL_TO_START_DATE=4;
public static final int END_DATE_CAN_GREATER_THAN_TODAY=5;
public static int DATE_SHOULD_BE_GREATER_THAN_TODAY=6;
public static boolean dateVadidation(String date,int validationType)
{
String currentDate = showDateFormat(System.currentTimeMillis());
SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy");
if (validationType == DATE_EQUAL_TO_TODAY) {
try {
Date dtCurrent = df.parse(currentDate);
Date dtCompareWith = df.parse(date);
return dtCurrent.before(dtCompareWith) || dtCurrent.after(dtCompareWith);
} catch (Exception e) {
Log.e("DATE_EQUAL_TO_TODAY", "Date Parsing Exception:" + e.getMessage());
}
}
if(validationType == DATE_EQUAL_TO_GREATER_THAN_TODAY)
{
try {
Date dtCurrent = df.parse(currentDate);
Date dtCompareWith = df.parse(date);
return dtCurrent.after(dtCompareWith);
} catch (Exception e) {
Log.e("DATE_EQUAL_TO_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
}
}
if(validationType == DATE_EQUAL_TO_LESS_THAN_TODAY)
{
try {
Date dtCurrent = df.parse(currentDate);
Date dtCompareWith = df.parse(date);
return dtCurrent.before(dtCompareWith);
} catch (Exception e) {
Log.e("DATE_EQUAL_TO_LESS_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
}
}
if(validationType==END_DATE_CAN_GREATER_THAN_TODAY)
{
try {
Date dtTo = df.parse(date);
Date dtCurrent = df.parse(currentDate);
return dtTo.before(dtCurrent) ;
}
catch (Exception e) {
Log.e("END_DATE_CAN_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
}
}
if(validationType==DATE_SHOULD_BE_GREATER_THAN_TODAY)
{
try {
Date dtTo = df.parse(date);
Date dtCurrent = df.parse(currentDate);
return (dtTo.after(dtCurrent) && (! dtTo.equals(dtCurrent))) ;
}
catch (Exception e) {
Log.e("DATE_SHOULD_BE_GREATER_THAN_TODAY", "Date Parsing Exception:" + e.getMessage());
}
}
return false;
}
答案 2 :(得分:0)
如果您想在忽略时间部分后比较日期,那么this SO问题将为您提供洞察力。另请参阅 Pankaj Kumar
发布的SO问题链接日期对象实施可比较界面。因此,您可以使用 compareTo 方法进行精确的日期比较(包括时间组件)。当然,还有 Date.equals(),如果 Date.getTime()方法为要比较的两个日期实例返回相同的long值,它将返回true。
答案 3 :(得分:0)
将日期字符串转换为日历,并以毫秒为单位从MilliSeconds中获取时间。您必须使用DateFormatter进行转换。
获取另一个Calendar对象,并在另一个long中获得MilliSeconds中的时间。这是系统时间。
比较以上两个长变量。
希望它有所帮助。