在我的安卓应用程序中,有一个用户定义的日期。此日期应大于或等于系统日期。如果是,则过程将继续。如果不是,则给出一个吐司 跟进日期应大于或等于系统日期。
我使用了这个代码段。
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 消息。
任何人都可以如此友善地解释这里发生了什么以及我如何解决这个问题。
提前感谢
我正在使用这个
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;
}
我已经让这种方法验证了所有可能的日期验证。它可以帮助你。
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;
}
忽略时间部分后比较日期,那么这个SO问题将为您提供见解。另请参阅Pankaj Kumar发布的SO问题链接
日期对象实现可比较接口。因此,您可以使用 compareTo 方法进行精确的日期比较(包括时间部分)。当然,如果 Date.getTime() 方法为正在比较的两个日期实例返回相同的长值,则 Date.equals() 将返回 true。
我建议使用成熟的库,例如Joda。请注意此处讨论的一些内存问题和解决方法。
-
将日期字符串转换为日历,并从中获取以毫秒为单位的时间。您必须使用DateFormatter进行该转换。
-
拿另一个日历对象,在另一个长时间内获取以毫秒为单位的时间。这是系统时间。
-
比较上述两个长变量。
希望对您有所帮助。