最近在复习Java基础,编写一个实例:很简陋的可视化日历。我会赶快学会markdown,对你阅读造成不便,要谅解哦!
温馨提示: 如果觉得对你有那么一点点帮助,请帮我在评论区祝我喜欢的女孩能够找到幸福:晓儿,希望幸福能快点找到你!
先上代码:编写这个可视化日历呢,用的是Java.util包的Calendar类。使用这个类需要注意:每周是从周日开始,从1-7。也就是数字1代表周日,然后依次推。实现当月日期的查询有两个显示方法:
第一种:因为要知道当月的第一天并不一定是周日,所以需要把日历中上个月多出来的天数算进去。第一种方法呢,使用
c1.get(Calendar.DAY_OF_WEEK); //当月第一天是星期几
得到当月首日是周几也就知道它前面有几天是上个月的,记住是从周日开始的。为了能够每周换一行我使用对7求模的方法,所以引入tmp这个中间变量,使用这个看上去有点乱的循环实现把上个月的天数空出来和每周换行。
接着判断是否为当日,通过得到当日是当月的第几天然后判断是否换行。
int today = c.get(Calendar.DAY_OF_MONTH); //当天是这个月的第几天,方便做标记
if(i-tmp == today) //i减去tmp的意义在于得到去除上月残留天数得到现在是当月的第几天
public static void test(String str) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(date);
Date date1 = df.parse(str.substring(0,str.lastIndexOf('-')+1)+"01");
Calendar c1 = new GregorianCalendar();
c1.setTime(date1); //月初
int maxDates = c.getActualMaximum(Calendar.DATE); //当月天数
int start = c1.get(Calendar.DAY_OF_WEEK); //当月第一天是星期几
int today = c.get(Calendar.DAY_OF_MONTH); //当天是这个月的第几天,方便做标记
int tmp = start-1;
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1; i <= maxDates+tmp; i++) {
if (i < start) {
System.out.print(" "+"\t");
} else {
System.out.print(i-tmp);
if (i-tmp == today) {
System.out.print("*"+"\t");
} else {
System.out.print("\t");
}
}
if (i%7 == 0) {
System.out.println();
}
}
}
第二种:使用的是Calendar类的静态成员变量作为换行依据。通过判断当月首日是周几,先用小循环将上个月的天数空出来占位,再通过得到当月的总天数作为循环条件。
int maxDates = c.getActualMaximum(Calendar.DATE); //当月天数
c1.add(Calendar.DATE, 1); // 每循环一次,日期增加一天
然后通过 c1.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY 实现每到周六就换行一次。
注意:Calendar.SATURDAY的数字表示为7.下面是Calendar的源码:
/**
* Value of the {@link #DAY_OF_WEEK} field indicating
* Saturday.
*/
public final static int SATURDAY = 7;
public static void test2(String str) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(date);
Date date1 = df.parse(str.substring(0,str.lastIndexOf('-')+1)+"01");
Calendar c1 = new GregorianCalendar();
c1.setTime(date1); //月初
int maxDates = c.getActualMaximum(Calendar.DATE); //当月总天数
int start = c1.get(Calendar.DAY_OF_WEEK); //当月第一天是星期几
int today = c.get(Calendar.DAY_OF_MONTH); //当天是这个月的第几天,方便做标记
System.out.println("日\t一\t二\t三\t四\t五\t六");
for (int i = 1; i < c1.get(Calendar.DAY_OF_WEEK); i++) { //将上月的剩余天数空出来
System.out.print(" " + "\t");
}
for (int i = 1; i <= maxDates; i++) {
System.out.print(i);
if (i == today) { //如果当天是今天,就做一个星号标记
System.out.print("*"+"\t");
} else {
System.out.print("\t");
}
if (c1.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY) { //每个周六就换行
System.out.println();
}
c1.add(Calendar.DATE, 1); //每循环一次,日期增加一天
}
}
然后直接在main方法进行调用:
public static void main(String[] args) throws ParseException{
Scanner sc = new Scanner(System.in);
System.out.println("请输入日期:(年月日,格式:2018-3-13):");
String str = sc.nextLine();
test2(str);
}
结果如图所示(前方三俗预警,高手请回避!!!):
好了,虽然很LOW,慢慢来吧!记得帮我留言哦