import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

import static java.util.Calendar.MONTH;
import static java.util.Calendar.YEAR;

public class CalendarDemo1 {
    public static void main(String[] args) throws ParseException {
        /*
        String str="2023年09月10日";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
        Date d = sdf.parse(str);
        d.setTime(d.getTime()+1000*60*60*24*30L);
        String str1=sdf.format(d);
        System.out.println(str1);
        //用date来计算增加一个月后的日期
         */
        /*
        public static Calendar getInstance() 获取日历对象

        public final Date getTime() 获取日历对象表示的日期
        public final setTime(Date date) 给日历设置日期对象

        public long getTimeInMillis() 获取日历对象表示的毫秒值
        public void setTimeInMillis(long millis) 设置日历对象表示的毫秒值

        public int get(int field) 获取日历对象指定字段的值
        public void set(int field,int value) 设置日历对象指定字段的值
        public void add(int field,int amount) 给日历对象指定字段增加/减少指定的值
         */

        //1.获取日历对象
        //细节1:calendar是一个抽象类,不能直接new
        //底层原理根据不同的时区,获取不同的日历对象
        //会把时间中的纪元,年,月,日,时,分,秒,星期,时区,夏令时等信息,封装到日历对象中
        //0:纪元
        //1:年
        //2:月
        //3:一年中的第几周
        //4.一个月中的第几周
        //5:一个月中的第几天(日)
        //.....
        //细节2:日历的月份是从0开始的,0表示1月,11表示12月
        //细节3:日历中星期天是1,星期一是2,星期二是3,以此类推
        Calendar c1 = Calendar.getInstance();
        System.out.println(c1);

        //2.修改日历时间
        Date d1=new Date(0L);
        c1.setTime(d1);
        System.out.println(c1);

        //3.设置日历对象指定字段的值
        c1.set(YEAR,2025);
        c1.set(MONTH,3);
        c1.set(Calendar.DAY_OF_MONTH,17);

        c1.add(MONTH,1);//复数表示减少

        //java把索引都对应了一个常量
        int year = c1.get(YEAR);
        int month = c1.get(MONTH)+1;
        int day = c1.get(Calendar.DAY_OF_MONTH);
        int week = c1.get(Calendar.DAY_OF_WEEK);
        System.out.println(year+"年"+month+"月"+day+"日"+week(week));

    }

    public static String week(int week){//也可以用查表法
        switch(week){
            case 1-> {
                return "星期日";
            }
            case 2 -> {
                return "星期一";
            }
            case 3-> {
                return "星期二";
            }
            case 4 -> {
                return"星期三";
            }
            case 5 -> {
                return"星期四";
            }
            case 6 -> {
                return"星期五";
            }
            case 7 -> {
                return"星期六";
            }
            default -> {
                return"";
            }
        }

    }
}