Android:比较日历日期

时间:2012-04-14 17:02:44

标签: java android date

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

long time = Calendar.getInstance().getTimeInMillis();

现在我希望数据每年更新一次,时间为03.03和08.08。 自上次更新以来,我怎样才能检查这两个日期寄宿生中的一个?

4 个答案:

答案 0 :(得分:21)

将它们更改为以秒为单位的时间并进行比较:

 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
     }
 }

答案 1 :(得分:7)

有一些非常重要的事情花了我一段时间来弄清楚,如果你正在寻找以下任何问题的答案,那么这对你们非常有帮助:

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

由于某些原因,Java将月份值排序为数组,我的意思是Java 1月份为0,12月份为11年份。如果将12月份设置为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!)

现在什么是正确的方式才能在屏幕上看到它?

如果您尝试“yourCalendar.DATE的system.out.println,yourCalendar.MONTH和yourCalendar.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天内发生,因此我必须执行以下操作:

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然后您创建日历

    Calendar cal = new GregorianCalendar(); // calendar
    String myDateAsString= "15/07/2012";    // my Date As String
    int MYcald = getMeD(myDateAsString); // returns integer
    int MYcalm = getMeM(myDateAsString); // returns integer
    int MYcaly = getMeY(myDateAsString); // returns integer

            cal.set(MYcaly, MYcalm, MYcald);

3获取当前日期(今天)

    Calendar curr = new GregorianCalendar(); // current cal
    calact.setTimeInMillis(System.currentTimeMillis());

4创建时间日历以进入未来10天

Calendar caltemp = new GregorianCalendar(); // temp cal
caltemp.setTimeInMillis(System.currentTimeMillis());
caltemp.add(calact.DAY_OF_MONTH, 10); // we move into the future

比较所有3个日历

这里基本上你会询问我所给出的日期是否肯定会在将来发生和(&&)如果给定日期也小于未来10天的日期,那么请告诉我“事情将会在接下来的10天内确定!”否则,请给我看: “事件将在下一个10天内到位。”

    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");}

ALRIGHT GUYS和GIRLS我希望有所帮助。对你而言,这对你的项目来说真是一件好事!

和平。 约阿夫。

答案 2 :(得分:2)

如果比较应该只包含 年,月和日,那么您可以使用此方法检查 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;                        
            }
        }
    }

答案 3 :(得分:1)

使用compareTo方法..这会返回整数值.if返回-ve当前日期之前的天数,否则返回+ ve当前日期之后的天数