[英]Android: compare calendar dates
在我的应用程序中,我在上次更新服务器中的某些数据时保存。 因此我用过:
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 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!)
现在,什么是正确的方式来获得在屏幕上看到它的日期?
如果您尝试“your.calendar.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天内发生,因此我必须执行以下操作:
这很简单
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;
}
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);
Calendar curr = new GregorianCalendar(); // current cal
calact.setTimeInMillis(System.currentTimeMillis());
Calendar caltemp = new GregorianCalendar(); // temp cal
caltemp.setTimeInMillis(System.currentTimeMillis());
caltemp.add(calact.DAY_OF_MONTH, 10); // we move into the future
在这里,基本上你会问我所给出的日期是否肯定会在将来发生和(&&)如果给定日期也小于未来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");}
我希望有帮助的直接的男生和女孩。 对你而言,祝你生气勃勃,祝你生活愉快!
和平。 约阿夫。
如果比较仅涉及年,月和日,那么您可以使用此方法检查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;
}
}
}
使用compareTo方法..并返回整数值.if返回-ve当前日期之前的天数,否则返回+ ve当前日期之后的天数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.