Calendar和GregorianCalendar日历类

Calendar和GregorianCalendar日历类


Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
注意月份的表示,一月是0,二月是1,以此类推,12月是11。因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY, FEBRUARY,等等。

// 时间为2018-11-08零点
Calendar calendar = new GregorianCalendar(2018, 10, 8, 0, 0, 0);

/**
 * 打印当前月份日历
 */
public class CalendarTest {

    public static void main(String[] args) {
        // 设置日历的显示的地区(根据自己的需要写)
        Locale.setDefault(Locale.ENGLISH);

        // GregorianCalendar是Calendar的子类
        GregorianCalendar gc = new GregorianCalendar();
        int today = gc.get(Calendar.DAY_OF_MONTH);
        int month = gc.get(Calendar.MONTH);

        // 设置月份的起始日期为1
        gc.set(Calendar.DAY_OF_MONTH, 1);

        // 获取一周中的第几天
        int weekday = gc.get(Calendar.DAY_OF_WEEK);

        // 获取一周中的第一天
        int firstDayOfWeek = gc.getFirstDayOfWeek();

        // 计算月份第一行的缩进数
        int indent = 0;// 缩进数
        while (weekday != firstDayOfWeek) {
            indent++;
            gc.add(Calendar.DAY_OF_MONTH, -1);// 日期减1
            weekday = gc.get(Calendar.DAY_OF_WEEK);
        }

        // 打印星期名
        String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();
        do {
            System.out.printf("%4s", weekdayNames[weekday]);
            gc.add(Calendar.DAY_OF_MONTH, 1);
            weekday = gc.get(Calendar.DAY_OF_WEEK);
        } while (weekday != firstDayOfWeek);
        System.out.println();

        // 打印日历第一行的缩进空格
        for (int i = 0; i <= indent; i++) {
            System.out.print("  ");// 两个空格
        }

        // 设置月份的起始日期为1
        gc.set(Calendar.DAY_OF_MONTH, 1);

        // 打印日期
        do {
            // 打印天数
            int day = gc.get(Calendar.DAY_OF_MONTH);
            System.out.printf("%3d", day);

            // 用“*”标记今天
            if (day == today) {
                System.out.print("*");
            } else {
                System.out.print(" ");
            }

            gc.add(Calendar.DAY_OF_MONTH, 1);// 天数加1
            weekday = gc.get(Calendar.DAY_OF_WEEK);

            // 打印一周后换行
            if (weekday == firstDayOfWeek) {
                System.out.println();
            }
        } while (gc.get(Calendar.MONTH) == month);// 到下个月结束

    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值