最近在写一个关于闹钟的时间设置的功能,类似于Android原生系统中的日历提醒的时间设置。让人头疼的是这时间设置涉及特别多种的可能事件,有点让人 头疼。这篇博文主要用来记录在这个功能实现之前所用的时间日期转化的各种方法。
- 判断某年某月有多少天
int year = 2017;
int month = 3;
Calendar c = Calendar.getInstance();
c.set(year, month, 0); //输入类型为int类型
int dayOfMonth = c.get(Calendar.DAY_OF_MONTH); //得到的数字就是这个月的天数
- 将日期转化为
public static String getWeek(int year ,int month ,int day){
Calendar setDate = Calendar.getInstance();
setDate.set(year ,month ,day);
int weekCode = setDate.get(Calendar.DAY_OF_WEEK);
String weekString = null;
switch (weekCode){
case 1 :
weekString = "星期天";
break;
case 2 :
weekString = "星期一";
break;
case 3 :
weekString = "星期二";
break;
case 4 :
weekString = "星期三";
break;
case 5 :
weekString = "星期四";
break;
case 6 :
weekString = "星期五";
break;
case 7 :
weekString = "星期六";
break;
}
return weekString;
}
这里需要注意的是,星期日是一个星期的开头
- 根据日期返回月份模式的数据,1表示某个月的第几号,2表示某个月的第几个星期的星期几,3表示某个月的最后一个星期的星期几
public static Map<Integer ,String> getMonthMode(int year ,int month ,int day){
Calendar calendar = Calendar.getInstance();
calendar.set(year ,month ,day);
Map<Integer ,String> mapMonthMode = null;
//这个月的第几天
String modeOneString = "每月的第" + day + "天";
mapMonthMode.put(1 ,modeOneString);
//这个月的第几周
int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);
if(weekOfMonth <= 4){ //如果是第五周则不考虑
String modeTwoString = "每月的第" + weekOfMonth + "个" + getWeek(year ,month ,day);
mapMonthMode.put(2 ,modeTwoString);
}
//这个月的最后一个星期几
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH, 0);
int lastDay = calendar.get(Calendar.DAY_OF_MONTH); //获取月份最后一天的日期
if((lastDay - day) < 7){ //如果大于等于7,则不是最后一个星期
String modeThreeString = "每月的最后一个" + getWeek(year ,month ,day);
//getWeek(year ,month ,day)是上一个日期转周的方法体
mapMonthMode.put(2 ,modeThreeString);
}
return mapMonthMode;
}