Java日历--日历填坑

一月到十二月的英语:
一月January,二月February,三月March,四月April,五月May,六月June,七月July,八月August,九月September,十月October,十一月November,十二月December
星期一到星期五的英语:
Monday 星期一
Tuesday 星期二
Wednesday 星期三
Thursday 星期四
Friday 星期五
Saturday 星期六
Sunday 星期天

注意:Calendar类中的月份表示是0-11,挺反人类的,其他的都正常,比如2021表示2021年。由于外国人的习惯,把周天放在了第一位,所以星期是从周天开始的,1表示周天,2表示周一,以此类推。在代码中,我使用蓝色表明Calendar对象所代表的当前日期。使用System.out.format()语句来实现。

下面上代码:

点击查看代码
import java.util.Calendar;

public class Test {
    public static void main(String args[]){
        //获取日期
//        System.out.println(calendar.get(Calendar.DATE));
        //获取周几
//        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        //获取月份
//        int month = calendar.get(Calendar.MONTH);
        //获取一个月的天数
//        System.out.println(calendar.getMaximum(Calendar.DATE));

        //获得Calendar对象
        Calendar calendar = Calendar.getInstance();
        //设置起始日期为2021年12月1日
        calendar.set(2022,0,1);
        //打印calendar表示的时间
        System.out.println(calendar.getTime());

        //打印上层星期u
        String[] weeks = new String[]{"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
        for (String e : weeks){
            System.out.print(" "+e);
        }
        System.out.println();
        //首先获得当前时间的星期,新建一个int数组,大小是calendar表示月的天数加上之前天,也就是日历中开始为空的部分。
        int week = calendar.get(calendar.DAY_OF_WEEK)-1;
        int n = week + calendar.getMaximum((calendar.DATE));
        int[] days = new int[n];
        days[week] = 1;
        int z = 2;
        //给数组赋值,模拟1号到月底
        for(int j = week+1; j < n; j++){
            days[j] = z++;
        }
        
        //将数组按7个为一排打印出来,和上层星期排好
        int i = 0;
        for(int a : days){
            if(i != 0 && i % 7 ==0){
                System.out.println();
            }
            if(days[i] >= 10){
                if(calendar.get(Calendar.DATE) == days[i]){
                    System.out.format("  \033[34m%d",days[i++]);
                }else {
                    System.out.format("  \033[0m%d",days[i++]);
                }
            }else {
                if(days[i] == 0){
                    System.out.print("    ");
                    i++;
                }else{
                    if(calendar.get(Calendar.DATE) == days[i]){
                        System.out.format("   \033[34m%d",days[i++]);
                    }else {
                        System.out.format("   \033[0m%d",days[i++]);
                    }
                }
            }
        }
    }
}

直接上bug吧,calendar的日期输入不一样时,日历会发生改变。

最后代码修改的样子:

点击查看代码
import java.util.Calendar;

public class Test {
    public static void main(String args[]){
        //获取日期
//        System.out.println(calendar.get(Calendar.DATE));
        //获取周几
//        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        //获取月份
//        int month = calendar.get(Calendar.MONTH);
        //获取一个月的天数
//        System.out.println(calendar.getMaximum(Calendar.DATE));

        //获得Calendar对象
        Calendar calendar = Calendar.getInstance();
        //设置查询的日期并使用get方法获得日期中的年、月、日
        calendar.set(2000,1,24);
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year);
        int month = calendar.get(Calendar.MONTH);
        System.out.println(month);
        int day = calendar.get(Calendar.DATE);
        System.out.println(day);
        //打印calendar表示的时间
        System.out.println(calendar.getTime());

        //打印上层星期u
        String[] weeks = new String[]{"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
        for (String e : weeks){
            System.out.print(" "+e);
        }
        System.out.println();
        //首先获得当前时间所在月1号的星期,新建一个int数组,大小是calendar表示月的天数加上之前天,也就是日历中开始为空的部分。
        calendar.set(year,month,1);
        int week = calendar.get(calendar.DAY_OF_WEEK)-1;
        int n = week + calendar.getMaximum((calendar.DATE));
        int[] days = new int[n];
        days[week] = 1;
        int z = 2;
        //给数组赋值,模拟1号到月底
        for(int j = week+1; j < n; j++){
            days[j] = z++;
        }

        //将数组按7个为一排打印出来,和上层星期排好
        int i = 0;
        for(int a : days){
            if(i != 0 && i % 7 ==0){
                System.out.println();
            }
            if(days[i] >= 10){
                if(day == days[i]){
                    System.out.format("  \033[34m%d",days[i++]);  //eclipse不支持这样的颜色显示
                }else {
                    System.out.format("  \033[0m%d",days[i++]);
                }
            }else {
                if(days[i] == 0){
                    System.out.print("    ");
                    i++;
                }else{
                    if(day == days[i]){
                        System.out.format("   \033[34m%d",days[i++]);
                    }else {
                        System.out.format("   \033[0m%d",days[i++]);
                    }
                }
            }
        }
    }
}
贴一个可以在cmd和eclipse中运行的
点击查看代码
import java.util.Calendar;

public class Test {
    public static void main(String args[]){
        //获取日期
//        System.out.println(calendar.get(Calendar.DATE));
        //获取周几
//        System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
        //获取月份
//        int month = calendar.get(Calendar.MONTH);
        //获取一个月的天数
//        System.out.println(calendar.getMaximum(Calendar.DATE));

        //获得Calendar对象
        Calendar calendar = Calendar.getInstance();
        //设置查询的日期并使用get方法获得日期中的年、月、日
//        calendar.set(2000,1,24);
//        calendar.setTimeInMillis(System.currentTimeMillis());
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year);
        int month = calendar.get(Calendar.MONTH);
        System.out.println(month);
        int day = calendar.get(Calendar.DATE);
        System.out.println(day);
        //打印calendar表示的时间
        String now = String.format("%tF",calendar);
        System.out.println("你好,今天的日期是:\n"+now);

        //打印上层星期u
        String[] weeks = new String[]{"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
        for (String e : weeks){
            System.out.print(" "+e);
        }
        System.out.println();
        //首先获得当前时间所在月1号的星期,新建一个int数组,大小是calendar表示月的天数加上之前天,也就是日历中开始为空的部分。
        calendar.set(year,month,1);
        int week = calendar.get(calendar.DAY_OF_WEEK)-1;
        int n = week + calendar.getMaximum((calendar.DATE));
        int[] days = new int[n];
        days[week] = 1;
        int z = 2;
        //给数组赋值,模拟1号到月底
        for(int j = week+1; j < n; j++){
            days[j] = z++;
        }

        //将数组按7个为一排打印出来,和上层星期排好
        int i = 0;
        for(int a : days){
            if(i != 0 && i % 7 ==0){
                System.out.println();
            }
            if(days[i] >= 10){
                System.out.print("  "+days[i++]);
            }else {
                if(days[i] == 0){
                    System.out.print("    ");
                    i++;
                }else{
                    System.out.print("   "+days[i++]);
                }
            }
        }
    }
}

posted on 2021-12-14 18:05  小白成长变大神  阅读(67)  评论(0编辑  收藏  举报