日期选择需求,展示年月和当月所有日期的同时,能够动态切换日期,同时今天要特别显示
页面元素主要包括,年 月 一个月的天和天对应的星期名
用户操作交互时,
首次进入需要获取当前日期的 年 月 和本月的全部天和星期
点击年月的上下箭头,需要月加减,遇到1月减或者12月加时,需要年份进行增减,同时 月份变化,也需要获取变化后的月天数和对应的星期名 并刷新
特殊需求:注意匹配今天,周显示为今天,同时本日的字变色,加圆背景
获取今天的日期信息
获取今日的日期信息
Calendar calendar = Calendar.getInstance();
获取上月字符串
//传入保存的Calendar calendar对象
public void getLastMouth(Calendar calendar){
DateFormat df = new SimpleDateFormat("YYYY/MM");
calendar.add(Calendar.MONTH, -1);
date = (Date) calendar.getTime();
String format = df.format(date);
System.out.println(format);
}
获取下月字符串
//传入保存的Calendar calendar对象
public void getNextMouth(Calendar calendar){
DateFormat df = new SimpleDateFormat("YYYY/MM");
calendar.add(Calendar.MONTH, 1);
date = (Date) calendar.getTime();
String format = df.format(date);
System.out.println(format);
}
获取对应月天数
/**
* 根据年 月 获取对应的月份 天数
用保存的calendar获取
calendar.get(Calendar.YEAR);
calendar.get(Calendar.MOUTH);
*/
public static int getDaysByYearMonth(int year, int month) {
Calendar a = Calendar.getInstance();
a.set(Calendar.YEAR, year);
a.set(Calendar.MONTH, month - 1);
a.set(Calendar.DATE, 1);
a.roll(Calendar.DATE, -1);
int maxDate = a.get(Calendar.DATE);
return maxDate;
}
获取当天的周数
/**
* 获取当天的周数
*
* @param date
* @return
*/
public static String getDaysOfWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int i = calendar.get(Calendar.DAY_OF_WEEK);
switch (i) {
case 1:
return "周天" ;
case 2:
return “周一”;
case 3:
return “周二”;
case 4:
return “周三”;
case 5:
return “周四”;
case 6:
return “周五”;
case 7:
return “周六”;
default:
return "";
}
}
获取对应天数和周数的逻辑
Canlendar calendar = Canlendar.getInstance();
int monthDays=getDaysByYearMonth(calendar.get(Calendar.YEAR),calendar.get(Calendar.MOUTH));
for (int i = 0; i < monthDays; i++) {
instance.set(year,month,i+1);
dateInfoList.add( new DateInfoBean(instance.get(Calendar.YEAR),
instance.get(Calendar.MONTH),
instance.get(Calendar.DAY_OF_MONTH),
DateUtil.getDaysOfWeek(instance.get(Calendar.DAY_OF_WEEK))));
}
这样就能获得当月所有的日期和对应日期的周名称
经过一番分析总结,发现功能并不复杂,主要在于日期的不断交换,ui上很简单,图标按钮和列表组合一下,及时刷新日期数据即可,相信大家也能很快掌握。