Java Android:比较日历日期

Java Android:比较日历日期,java,android,date,Java,Android,Date,在我的应用程序中,我上次更新服务器上的一些数据时正在保存。 因此,我使用: long time = Calendar.getInstance().getTimeInMillis(); 现在我希望数据每年更新两次,分别为03.03和08.08。 如何检查自上次更新以来,这两个约会寄宿生中是否有一个是交叉的?将其更改为以毫秒为单位的时间,并进行比较: Calendar c = Calendar.getInstance(); c.set(Calendar.MONTH, Calendar.M

在我的应用程序中,我上次更新服务器上的一些数据时正在保存。 因此,我使用:

long time = Calendar.getInstance().getTimeInMillis();
现在我希望数据每年更新两次,分别为03.03和08.08。
如何检查自上次更新以来,这两个约会寄宿生中是否有一个是交叉的?

将其更改为以毫秒为单位的时间,并进行比较:

 Calendar c = Calendar.getInstance();
    c.set(Calendar.MONTH, Calendar.MARCH);
    c.set(Calendar.DAY_OF_MONTH, 3);
 long time2=   c.getTimeInMillis();
 c.set(Calendar.MONTH, Calendar.AUGUST);
 c.set(Calendar.DAY_OF_MONTH, 8);   
 long time3=   c.getTimeInMillis();
 if(time>time2){
     //Logic
     if(time>time3){
         //Logic
     }
 }

有一件非常重要的事情我花了一段时间才弄明白,这对那里的人们非常有帮助,如果您正在寻找以下任何问题的答案,这是给您的:

为什么我的日期显示不正确? 为什么即使我手动设置时间,它也显示不正确? 为什么月份和年份比我设定的日期少一天

出于某种原因,Java像数组一样对月份值进行排序,我的意思是,对于Java,一月是0,十二月是11。这一年也是如此,如果您将12月设置为12月,将年份设置为2012年,然后尝试对月份和年份执行“system.out.println”,它会将我的月份显示为1月,将年份显示为2013年

那你该怎么办

Calendar cal = new GregorianCalendar();
cal.set(2012, 11, 26); // the date I want to input is 26/12/2012 (for Java, 11 is December!)
现在,什么是正确的方式来获取日期,以便在屏幕上看到它

如果您尝试“system.out.println of your calendar.DATE、your calendar.MONTH和your calendar.YEAR”,则不会显示正确的日期

如果要显示日期,需要执行以下操作:

System.out.println (calact.get (calact.DATE)); 
// displays day
System.out.println (calact.get (calact.MONTH)+1); 
//add 1 remember it saves values from 0-11
System.out.println (calact.get (calact.YEAR));  
// displays year
现在,如果您正在处理表示日期的字符串,或者。。。。 如果您需要比较范围之间的日期,假设您需要知道日期“A”是否将在未来10天内发生……这……是……给……您的

在我的例子中,我使用的字符串格式为“15/07/2012”,我需要知道该日期是否会在未来10天内发生,因此我必须执行以下操作:

System.out.println (calact.get (calact.DATE)); 
// displays day
System.out.println (calact.get (calact.MONTH)+1); 
//add 1 remember it saves values from 0-11
System.out.println (calact.get (calact.YEAR));  
// displays year
1获取字符串日期并将其转换为日历(此处使用了StringTokenizer) 这很简单

StringTokenizer tokens=new StringTokenizer(myDateAsString, "/");
执行nextToken,在返回日期之前,将其解析为整数并返回。 在返回减法1之前,请记住一个月

我将发布您创建的第一个和其他两个的代码:

public int getMeD(String fecha){

    int miDia = 0;
    String tmd = "0";

    StringTokenizer tokens=new StringTokenizer(fecha, "/");
    tmd = tokens.nextToken();

    miDia = Integer.parseInt(tmd);

    return miDia;
}
2然后创建日历 3获取我当前的日期(今天) 4创建时间日历,以进入未来10天 5比较所有3个日历 基本上,这里你会问我被告知的日期是否确实发生在未来,(&&&)如果被告知的日期也比未来的日期少10天,那么请告诉我“事件肯定会在未来10天内发生!!”否则请告诉我: “活动将不会在未来10天内举行”

if((cal.getTimeInMillis()>curr.getTimeInMillis())&&(cal.getTimeInMillis()
好了,伙计们,我希望这能有所帮助。给你们大家一个大大的拥抱,祝你们的项目好运

和平。
YOAV.

如果比较只涉及年、月和日,则可以使用此方法检查c1是否在c2之前。丑陋,但有效

public static boolean before(Calendar c1, Calendar c2){
        int c1Year = c1.get(Calendar.YEAR);
        int c1Month = c1.get(Calendar.MONTH);
        int c1Day = c1.get(Calendar.DAY_OF_MONTH);

        int c2Year = c2.get(Calendar.YEAR);
        int c2Month = c2.get(Calendar.MONTH);
        int c2Day = c2.get(Calendar.DAY_OF_MONTH);

        if(c1Year<c2Year){
            return true;
        }else if (c1Year>c2Year){
            return false;
        }else{
            if(c1Month>c2Month){
                return false;
            }else if(c1Month<c2Month){
                return true;
            }else{
                return c1Day<c2Day;                        
            }
        }
    }
之前的公共静态布尔值(日历c1、日历c2){
int c1Year=c1.get(日历年);
int c1Month=c1.get(Calendar.MONTH);
int c1Day=c1.get(日历.月的第天);
int c2Year=c2.get(日历年);
int c2Month=c2.get(日历月);
int c2Day=c2.get(日历,月的第天);
如果(c1Yearc2Year){
返回false;
}否则{
如果(c1月>c2月){
返回false;

}else if(c1Month使用compareTo method..并返回整数值。if返回-ve当前日期前几天else return+ve当前日期后几天

欢迎使用Stack Overflow。欢迎您的热情(如果您不喜欢粗体大写字母)。但是你的帖子与被问的问题只有一点点联系。请先看这篇文章。显然,你可以在这里添加答案。但在回答之前,你需要了解一些要点。首先,不要添加以前添加了相同代码或建议的答案。其次,不要添加ove如果用户特别询问了问题以及他需要解决的问题,则答案会非常复杂。第三,如果您想对答案或问题提出任何建议,可以添加注释。此答案是新的,以前没有发布过,因此没有问题现在您可以像这样比较两个日期:
calendar1.compareTo(calendar2)
然后返回-1:通过的日期--0:当前日期--1:第二天
Calendar caltemp = new GregorianCalendar(); // temp cal
caltemp.setTimeInMillis(System.currentTimeMillis());
caltemp.add(calact.DAY_OF_MONTH, 10); // we move into the future
    if((cal.getTimeInMillis() > curr.getTimeInMillis()) &&        (cal.getTimeInMillis()< curr.getTimeInMillis()))
    { System.out.println ("EVENT WILL TAKE PLACE FOR SURE WITHIN THE NEXT 10 DAYS!!");}
    else
    { System.out.println ("EVENT WILL *NOT* TAKE PLACE WITHIN THE NEXT 10 DAYS");}
public static boolean before(Calendar c1, Calendar c2){
        int c1Year = c1.get(Calendar.YEAR);
        int c1Month = c1.get(Calendar.MONTH);
        int c1Day = c1.get(Calendar.DAY_OF_MONTH);

        int c2Year = c2.get(Calendar.YEAR);
        int c2Month = c2.get(Calendar.MONTH);
        int c2Day = c2.get(Calendar.DAY_OF_MONTH);

        if(c1Year<c2Year){
            return true;
        }else if (c1Year>c2Year){
            return false;
        }else{
            if(c1Month>c2Month){
                return false;
            }else if(c1Month<c2Month){
                return true;
            }else{
                return c1Day<c2Day;                        
            }
        }
    }