日期处理:
java.util.Date: 类 Date 表示特定的日期和时间,精确到毫秒。
  三个子类
    java.sql.Date
    java.sql.Time
    java.sql.Timestamp
  常用构造函数:
    Date():获取当前日期
    Date(int year,int month,int date): 获取指定日期
    year - 减 1900 的年份。
    month - 0-11 的月份。
    date - 一月中 1-31 之间的某一天
  常用的方法:
    过时的方法:在方法上带的有一个删除线
    getYear():减 1900 的年份
    getMonth():获取月份,范围0~11
    getDate():获取日期
    getHours():获取当前日期的小时数
    getMinutes():获取当前日期的分钟数
    getSeconds():获取当前日期的秒数:
    toLocaleString():以与实现相关的方式创建此 Date 对象的字符串表示形式
    before(Date when):测试此日期是否在指定日期之前。
    after(Date when): 测试此日期是否在指定日期之后。
    .....
格式化输入日期:DateFormat和SimpleDateFormat ***
java.text.DateFormat:抽象类
  --java.text.SimpleDateFormat:DateFormat的子类
  常用的构造函数:
    SimpleDateFormat(String pattern)
    pattern:
      yyyy:年份 MM:月份 dd:日期 HH:小时(24进制) hh(12进制):小时 mm:分钟 ss:秒
  常用方法:
    format(Date d):将指定的日期格式化字符串
    parse(String s):将字符串转换(解析)为日期,会一个检查异常ParseException需要捕获

public class TestDate {
    public static void main(String[] args) {
        //获取当前时间:距1970-1-1 00:00:00 的总毫秒数
//        long now = System.currentTimeMillis();
//        long days = now/1000/3600/24;
//        System.out.println("距1970年1月1日的总天数:"+days);
//        //获取当前时间
//        Date date = new Date();
//        System.out.println(date.toString());
//        //过时的方法:在方法上有一个删除线
//        System.out.println(date.toLocaleString());
        /*
        year - 减 1900 的年份。
        month - 0-11 的月份。
        date - 一月中 1-31 之间的某一天
        */
//        Date date2 = new Date(116,3,17);
//        System.out.println(date2.toLocaleString());
        //过时的方法:getXxx():获取日期中指定的xx部分
//        int year = date.getYear();
//        System.out.println(year);//距1900年的总年数
//        int month = date.getMonth();//0~11之间,0代表1月
//        System.out.println(month);//
//        int day = date.getDate();//日期
//        System.out.println(day);
//        int hour = date.getHours();//小时
//        System.out.println(hour);
//        int min = date.getMinutes();
//        System.out.println(min);
//        int sec=date.getSeconds();
//        System.out.println(sec);
//        //测试此日期是否在指定日期之前
//        System.out.println(date.before(date2));
//        //测试此日期是否在指定日期之后
//        System.out.println(date.after(date2));
        
        //将日期转换为字符串
        Date nowDate = new Date();
        DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd hh时mm分ss秒");
        String str = dateFormat.format(nowDate);
        System.out.println(str);
        //将字符串转换为日期
        String str2="2017-4-17";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date nowDate2 = sdf.parse(str2);//checked异常,必须进行捕获
            System.out.println(nowDate2);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
    }
}

 


java.util.Calendar:抽象类
  --java.util.GregorianCalendar:是Calendar的子类
  如何获取实例
    1.Calendar calendar = new GregorianCalendar();
    2.Calendar calendar = Calendar.getIntance();
  常用的方法:
    get(field):获取日期的指定部分:get(int field)返回给定日历字段的值。
    field: Calendar.YEAR
       Calendar.MONTH
       Calendar.DATE
       Calendar.HOUR
       Calendar.MINUTE
       Calendar.SECOND
       Calendar.DAY_OF_YEAR
       Calendar.DAY_OF_MONTH
       Calendar.DAY_OF_WEEK ***
    set(field,value):将日历字段 field 更改为 value
    getActualMaximum(int field):给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值
    add(int field, int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量
    setTime(Date date):使用给定的 Date 设置此 Calendar 的时间

public class TestCalendar {
    public static void main(String[] args) {
//        Calendar calendar = new GregorianCalendar();
        Calendar calendar = Calendar.getInstance();//创建实例 
//        System.out.println(calendar.toString());
        //获取日期的指定部分:get(int field)返回给定日历字段的值。
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);//0~11
        int date = calendar.get(Calendar.DATE);
        int hour = calendar.get(Calendar.HOUR);
        int min = calendar.get(Calendar.MINUTE);
        int sec = calendar.get(Calendar.SECOND);
        System.out.println(year+"-"+(month+1)+"-"+date+" "+hour+":"+min+":"+sec);
        //获取当前日期是一年中的第多少天
        int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);//一年的第N天
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);//一月的第N天
        //查看今天是星期几?
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//一周的第N天(周日为第1天)
        System.out.println(dayOfYear+"-----"+dayOfMonth+"----"+dayOfWeek);
        //查看当月1号是一星期的第几天?
        //1.查看2016-4-17是一星期的第几天?
        calendar.set(Calendar.YEAR, 2016);
        calendar.set(Calendar.MONTH, 3);//0~11
        calendar.set(Calendar.DATE, 17);
//        System.out.println(calendar);
        int oldDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println("2016-4-17是一星期的第"+oldDayOfWeek+"天");
        //查看当前日期所在月份是1号是一周的第几天?
        Calendar calendar2 = Calendar.getInstance();
        calendar2.set(Calendar.DATE, 1);//2017-4-1
        calendar2.add(Calendar.MONTH, 3);//2017-7-1
        int dayOfWeek2 = calendar2.get(Calendar.DAY_OF_WEEK);
        System.out.println(dayOfWeek2);
        //获取当前月份最大的天数
        int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println(max);
    }
}

 

可视化日历
Calendar
 可以判断这个月一共多少天calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
判断某一天是星期几
1.实现思路
  1.按照提示输入任何一个日期
 2.打印日历  

 1.打印日历头:日 一 二 三 四 五 六
  2.打印1日之前的空格(循环)
  3.打印每一天(循环),周六换行
2.涉及技能点
  1.字符串转换成Date(DateFormat)
    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date = sdf.parse(sdate);
  2.Date转换成Calendar
    cal.setTime(sdate);
  3.获取当前输入的日期的日期部分:
    把1999-12-23修改为1999-12-1
      cal.set(Calendar.DATE,1);
  4.判断1999-12-1是星期几
    cal.get(Calendar.DAY_OF_WEEK)
  5.获取当前月的最大天数
    cal.getActualMaximum(Calendar.DATE)
  6.如何判断每天是不是星期六,如果是周六,换行
    cal.get(Calendar.DAY_OF_WEEK)==7
    cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY
  7.判断是不是当天,如果是,打印*
    cal.get(Calendar.DATE) *
  8.如何日期增加1天
    cal.add(Calendar.DATE, 1);

public class TestVisualCalendar {
    public static void main(String[] args) {
        //1.获取用户输入的日期
        System.out.println("请输入日期(2017-1-1)");
        Scanner input = new Scanner(System.in);
        String dateStr = input.nextLine();
        //2.将日期字符串转为日期
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = dateFormat.parse(dateStr);//shift+alt+z
            Calendar calendar = Calendar.getInstance();//获取Calendar对象(实例)
            calendar.setTime(date);//将输入的日期转为Calendar对象
            //3.获取当前日期部分
            int day = calendar.get(Calendar.DATE);
            //将当前日期设置成当月月份的第一天
            calendar.set(Calendar.DATE, 1);
            //4.判断输入日期的月份的第一天是星期几
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            //5.获取当前月份的最大天数
            int maxDays = calendar.getActualMaximum(Calendar.DATE);
            //6.打印日历头信息
            System.out.println("日\t一\t二\t三\t四\t五\t六");
            //7.打印1日之前的空格(关键是知道1日时星期几)
            for(int i=1;i<dayOfWeek;i++){
                System.out.print('\t');
            }    
            for(int i=1;i<=maxDays;i++){
                System.out.print(i+"\t");
                if(day==i){
                    System.out.print("*");
                }
                int w = calendar.get(Calendar.DAY_OF_WEEK);
                if(w==Calendar.SATURDAY){
                    System.out.println();//当前日期如果是周六的话需要换行
                }
                calendar.add(Calendar.DATE, 1);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
    }

}