Java——GregorianCalendar类

Java中将记录时间的类与表示日期的类分开,分别为表示时间点信息的Date类;表示人们所熟悉的公历表示法的GregorianCalendar类

创建GregorianCalendar对象:

         new GregorianCalendar();

         new GregorianCalendar(1999, 11, 31);

         new GregorianCalendar(1999,Calendar.DECEMBER,31);

         new GregorianCalendar(2007,Calendar.DECEMBER,31,23,59,59)  

常用的方法如:

         int get(Calendar.MONTH);     //由于JDK中月份范围是[0,11],也就是说月份从0开始,而其他却是从1开始的。故月份需加1

         int get(Calendar.DAY_OF_WEEK);   //一周中的第几天,对于Calendar.DAY_OF_WEEK 有时候需要减一,详解见博客

         void set(int field, int value);   //设置对应的时间

         Date getTime()      //返回当前对象所描述的时间点

         void setTime(Date date)

         int getFirstDayOfWeek(); //获取一周的第一天是星期几,地区不一样,结果可能不一样。

 

简单小日历:

package lxk;

import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class CurrentMouth {
    public static void main(String[] args) {
        GregorianCalendar calendar = new GregorianCalendar();

        int today = calendar.get(Calendar.DAY_OF_MONTH);    //获得当月第几天
//        System.out.println(today);
        int month = calendar.get(Calendar.MONTH);           //获得当前月份
        System.out.println("当前为" + (month + 1) + "月份");
        calendar.set(Calendar.DAY_OF_MONTH, 1);             //设置月份开始日期为1号
        int weekday = calendar.get(Calendar.DAY_OF_WEEK);   //获得当前为星期几,若周日为一周的第一天,返回的值需减一
//        System.out.println("当前星期" + weekday);
        int firstDayOfWeek = calendar.getFirstDayOfWeek();  //获得一周的第一天是星期几(有的地区是周日,有的地区是周一,周日则返回1,周一则返回2,……)
//        System.out.println(firstDayOfWeek);

        int indent = 0;                                     //记录日历第一行前面有几个空
        while(weekday != firstDayOfWeek){                   //寻找有几个空
            indent++;
            calendar.add(Calendar.DAY_OF_MONTH, -1);//日期前推一天
            weekday = calendar.get(Calendar.DAY_OF_WEEK);    //获得前推一天是星期几
//            System.out.println("星期" + weekday);
        }
        String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();  //获取星期的名字
        //打印第一行的星期名
        do{
            System.out.printf("%4s",weekdayNames[weekday]);
            calendar.add(Calendar.DAY_OF_MONTH, 1);
            weekday = calendar.get(Calendar.DAY_OF_WEEK);
        }
        while(weekday != firstDayOfWeek);

        System.out.println();
        //打印第一行空格
        for(int i=1; i <= indent; i++){
            System.out.print("       ");
        }
        calendar.set(Calendar.DAY_OF_MONTH, 1);               //设置月份开始为1号
        do{
            int day = calendar.get(Calendar.DAY_OF_MONTH);     //获得已打印到几号,用于判断是否为当天
            System.out.printf("%3d", day);

            if(day == today)
                System.out.print("*   ");                     //当天带有*标记
            else
                System.out.print("    ");

            calendar.add(Calendar.DAY_OF_MONTH, 1);      //日期加1
            weekday = calendar.get(Calendar.DAY_OF_WEEK);         //星期+1

            if(firstDayOfWeek == weekday)
                System.out.println();                             //换行
        }
        while(calendar.get(Calendar.MONTH) == month);             //如果是当前月就继续循环
        if (firstDayOfWeek != weekday)
            System.out.println();
    }
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值