7

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

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

现在我希望数据每年在 03.03 和 08.08 更新两次。我如何检查自上次更新以来这两个日期寄宿生中的一个是否被越过?

4

4 回答 4

23

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

 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
     }
 }
于 2012-04-14T17:27:43.100 回答
7

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

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

出于某种原因,Java 像数组一样对月份值进行排序,我的意思是对于 Java,1 月是 0,12 月是 11。如果将 12 月设置为 12 月,将年份设置为 2012 年,那么这一年也会发生同样的情况,然后尝试这样做月份和年份的“system.out.println”,它将显示我的月份为一月,年份为 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 yourCalendar.DATE、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

5 比较所有 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");}

好的伙计们和女孩们,我希望能有所帮助。给你们一个大大的拥抱,祝你们的项目好运!

和平。约瓦。

于 2012-07-07T00:27:44.163 回答
4

如果比较应该涉及年、月和日,那么您可以使用此方法检查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;                        
            }
        }
    }
于 2016-04-06T08:09:00.197 回答
2

used compareTo method ..and this returns integer value .if returns -ve the days before in current date else return +ve the days after come current date

于 2017-09-02T06:37:18.157 回答