2012-04-14 120 views
2

在我的应用程序中,当我上次更新服务器中的某些数据时,我正在保存。 所以我用:Android:比较日历日期

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

现在我想的是,数据在03.03和08.08每年更新两次。 如何查看上次更新后这两个日期寄宿生中的哪一个越过?

+0

你可以比较两个日期这样在此之后返回整数值: 'calendar1.compareTo(calendar2)'比回报-1:通过的日期--- 0:当前日期--- 1:第二天 – Saeid 2018-03-06 12:22:49

回答

17

改变他们的时间在mseconds和比较:

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

我会测试它。 – anonymous 2012-04-14 17:49:22

+0

检查我是否把正确的月份。 – Akhil 2012-04-14 17:59:11

7

有一些东西,我花了一段时间来弄明白,而且可用于人非常有帮助在那里,如果你正在寻找一个非常重要的回答以下任何问题适用于您:

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

由于某些原因,Java将月份值排序为一个数组,我的意思是Java的月份是0,DECEMBER是11岁。如果将12月设置为12月和2012年,然后尝试执行月份和年份的“system.out.println”,它会将我的月份显示为2013年1月和年份!

那么你应该怎么做?

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,yourCalendar.MONTH和yourCalendar.YEAR的的System.out.println,”不会告诉你正确的日期!!!!

如果你想显示你需要做以下的日期:

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 

现在,如果你正在处理THAT表示日期字符串或.... 如果需要比较日期范围之间,让我们说,你需要知道日期“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 

5比较所有3个日历中

这里基本上你问,如果我被赋予的日期是肯定的和正在发生的未来(& &)如果给定的日期也比未来少约10天的日期,然后请告诉我“事件将在下一个10天内确保!”否则显示ME: “事件将不发生在接下来的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");} 

爱人和女孩我希望有帮助。给你一个巨大的幸福和你的项目的幸运!

和平。 YOAV。

+4

欢迎来到Stack Overflow。欢迎您的热情(如果不是您对** BOLD CAPITAL LETTERS **的偏好)。但是,你的帖子与被问到的问题只有丝毫联系。 – 2012-07-07 02:06:00

1

如果比较应该包括年,月,日,那么你可以使用此方法进行检查,如果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;       
      } 
     } 
    } 
1

使用compareTo方法..和。如果返回之前-ve的日子在当前日期否则返回+已经日子将当前日期现在

+0

请看这首[如何对答案】(https://stackoverflow.com/help/how-to-answer) 这个问题之前回答,很明显,你可以在这里添加你的答案。但是在回答之前你需要了解一些观点。首先,不要添加之前添加了相同代码或建议的答案。其次,如果用户非常具体地询问了问题以及他需要解决什么问题,请不要添加过于复杂的答案。第三,如果您想就回答或问题提出任何建议,您可以添加评论。 – 2017-09-02 07:13:16

+0

这个答案是新的,没有发布之前,所以没有问题 – Saeid 2018-03-06 12:23:54