关于生日提醒的小小算法
这个问题的实质可以这样费解
1.用户已经生日了不需要提醒;
2.用户生日离现在不止一星期不需要提醒
所以我们得到的就是用户需要提醒的就是用户生日的月份在今年还没有过完(待定),用户的生日在今年到现在的日期相距不到7天;为什么前面写一个待定呢?因为我们假设这样一种情况,现在是现在是2012年的12月28日,但是用户的生日是在1990年的1月2日;这个我们是当然需要提醒的
解决之道:
从上面的分析中我们可以寻找到的解决方式就是 :
步骤1:如果说当前用户满足在当前年份还没过完生日,而且在提醒范围之内,我们返回true(程序运行结束),否则继续步骤2;
步骤2:如果当前的用户在下一年的生日离现在不足7天,那我们也需要提醒,满足条件返回true;否则我们返回给用户false,因为需要提醒就这两种情况。
算法用java的基本实现(时间仓促。性能没有足够的考虑,贴上代码)
1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Date; 4 public class BirthdayUtil { 5 public static boolean isRemindBirthday(String dateNow,String dateBirthday){ 6 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//将字符串类型转换成 7 Date now = null;//用来记录当前的日期 8 Date birthday = null;//用来记录用户的生日 9 Date birth = null;//用来记录用户的生日 10 //下面几行代码是用来将字符串的类型的数据按照指定的方式转换成为日期类型 11 try { 12 now = sdf.parse(dateNow); 13 birthday = sdf.parse(dateBirthday); 14 birth = sdf.parse(dateBirthday); 15 } catch (ParseException e) { 16 e.printStackTrace(); 17 } 18 //因为要提前7天提醒用户,我们将生日提前7天,1个提前一个不提前的作用是一个用来判断 19 //用户是否已经过了生日,一个用来判断是否在提醒的范围之类 20 birthday.setDate(birthday.getDate()-7); 21 birthday.setYear(now.getYear()); 22 birth.setYear(now.getYear()); 23 //如果说用户的生日没有在下一年的元旦,那我们只需要和今天年份相同的今日相比较就可以 24 if(birthday.before(now)&&!(birth.before(now))){ 25 return true; 26 } 27 birthday.setYear(now.getYear()+1); 28 birth.setYear(now.getYear()+1); 29 //如果说用户的生日在元旦的那段时间,那我们需要将年份设置在现在年份+1即可 30 if(birthday.before(now)&&!(birth.before(now))){ 31 return true; 32 } 33 return false; 34 } 35 36 public static void main(String[] args) { 37 System.out.println(BirthdayUtil.isRemindBirthday("2012-12-29", "1999-1-3")); 38 } 39 40 }