Java_日期相关

【一】日期相关_java.util.Date

public class Test {
    public static void main(String[] args) {
        //java.util.Date;
        Date d=new Date();
        System.out.println(d);
        System.out.println(d.toString());
        System.out.println(d.toGMTString());//过期方法,过时方法,废弃方法
        System.out.println(d.toLocaleString());

        System.out.println(d.getYear());//122
        System.out.println(d.getMonth());//6
        System.out.println(d.getTime());
        //返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒 数 。
        System.out.println(d.getTime());//1658803796634
        System.out.println(System.currentTimeMillis());
        /*(1)疑问:以后获取时间差用:getTime(),System.currentTimeMillis()
        * 答:System.currentTimeMillis()-->因为这个方法是静态的,可以类名.方法名直接调用
        * (2)public static native long currentTimeMillis();
        * 本地方法
        * 为什么没有方法体?因为这个方法的具体实现不是通过Java写的。
        * (3)这个方法的作用:
        * 一般会去衡量一些算法所用的时间
        * */
        long startTime=System.currentTimeMillis();
        for (int i=0;i<10000;i++)
        {

        }
        long endTime=System.currentTimeMillis();
        System.out.println(endTime-startTime);

    }
}

【二】日期相关_java.sql.Date

public class Test2 {
    public static void main(String[] args) {
        Date d=new Date(1658804421024L);
        System.out.println(d);
        /*
        (1)java.sql.Date和java.util.Date的区别:
        java.sql.Date :年月日  时分秒
        java.util.Date :年月日
         (2)java.sql.Date和java.util.Date的联系:
         java.sql.Date(子类) extends java.util.Date(父类)
         */

        //java.sql.Date和java.util.Date相互转换
        //【1】util--->sql
        java.util.Date date=new java.sql.Date(1658804421024L);//创建java.util.Date的对象
        //方式1:向下转型
        Date date1=(Date)date;
        /*
        父类:Animal an=new Dog();
        Dog d=(Dog)an;
         */
        //方式2:利用构造器
        Date date2=new Date(date.getTime());
        //【2】sql--->util
        java.util.Date date3=d;

        //【3】String ---> sql.Date
        Date date4=Date.valueOf("2022-7-26");
    }
}

【三】日期相关_SimpleDateFormat

【1】String—》java.util.Date类型转换:

分解:
(1)String—>java.sql.Date
(2)java.sql.Date—>java.util.Date

public class Test04 {
    public static void main(String[] args) {
        //(1)String--->java.sql.Date
        java.sql.Date date=java.sql.Date.valueOf("2015-9-24");
        //(2)java.sql.Date--->java.util.Date
        java.util.Date date1=date;
        System.out.println(date1);
    }
}

上面的代码有局限性,字符串的格式只能是年-月-日拼接的形式,换成其它类型,就会出现异常:

Exception in thread "main" java.lang.IllegalArgumentException
	at java.sql.Date.valueOf(Date.java:143)
	at com.test02.Test04.main(Test04.java:12)

【2】引入新的类:

在这里插入图片描述

public class Test05 {
    public static void main(String[] args) {
        //日期转换
        //SimpleDateFormat(子类)extends DateFormat(父类是一个抽象类)
        DateFormat de=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        //String ---> Date
        try {

            Date d=de.parse("2019/4/6 12:23:54");
            System.out.println(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        //Date--->String
        String format=de.format(new Date());
        System.out.println(format);
    }
}

【四】日期相关_Calendar

public class Test06 {
    public static void main(String[] args) {
        //Calendar抽象类不可以直接创建对象
        //GregorianCalendar( )子类 extends Calendar(父类是一个抽象类)
        Calendar cal=new GregorianCalendar();
        Calendar cal2=Calendar.getInstance();
        //System.out.println(cal);

        //常用的方法:get方法,传入参数:Calendar中定义的常量
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.get(Calendar.MONTH));
        System.out.println(cal.get(Calendar.DATE));
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));
        System.out.println(cal.getActualMaximum(Calendar.DATE));//获取当月日期的最大天数
        System.out.println(cal.getActualMinimum(Calendar.DATE));

        //set方法:可以改变Calendar中的内容
        cal.set(Calendar.YEAR,1990);
        cal.set(Calendar.MONTH,3);
        cal.set(Calendar.DATE,16);
        System.out.println(cal);

        //String--->Calender:
        //分解
        //String -->java.sql.Date
        java.sql.Date date=java.sql.Date.valueOf("2020-4-5");
        //java.sql.Date-->Calendar
        cal.setTime(date);
        System.out.println(cal);
    }
}

【五】日期相关_Calendar练习需求

在这里插入图片描述

public class Test08 {
    public static void main(String[] args) {
        //将String--->Calendar
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入你想要查看的日期:(提示:请按照例如2012-5-6的格式书写)");
        String strDate=sc.next();
        System.out.println(strDate);
        //String --> Calendar
        java.sql.Date date=java.sql.Date.valueOf(strDate);
        //Date --> Calendar
        Calendar cal=Calendar.getInstance();
        cal.setTime(date);

        //后续操作:
        System.out.println("日\t一\t二\t三\t四\t五\t六");

        //获取本月的最大天数:
        int maxDay=cal.getActualMaximum(Calendar.DATE);
        //获取当前日期中的日:
        int nowDay=cal.get(Calendar.DATE);
        //将日期调为本月的1号:
        cal.set(Calendar.DATE,1);
        //获取这个1号是本周的第几天
        int num=cal.get(Calendar.DAY_OF_WEEK);
        System.out.println(num);
        //前面空出来的天数为:
        int day=num-1;
        //引入一个计数器:
        int count=0;//计数器最开始值为 0
        //在日期前将空格打印出来:
        for (int i = 1; i <= day; i++) {
            System.out.print("\t");
        }
        //空出来的日子也要放入计数器
        count =count+day;
        //遍历:从1号开始到maxDay号进行遍历
        for (int i = 1; i <=maxDay ; i++) {

            if(i==nowDay){//如果遍历的i和当前日子一样的话,后面多拼一个*
                System.out.print(i+"*"+"\t");
            }else{
                System.out.print(i+"\t");
            }
            count++;//每在控制台输出一个数字,计数器做加1操作
            if(count%7==0){//当计数器的个数是7的倍数的时候,就换行操作
                System.out.println();
            }
        }

    }
}

【六】日期相关_JDK1.8新增日期时间API的原因

JDK1.0中使用java.util.Date类 --》 第一批日期时间API
JDK1.1引入Calendar类 --》 第二批日期时间API
缺陷:
(1)可变性:像日期和时间这样的类应该是不可变的。
(2)偏移性:Date中的年份是从1900开始的,而月份都从0开始。
(3)格式化:格式化只对Date有用,Calendar则不行。
JDK1.8新增日期时间API --》 第三批日期时间API

【七】日期相关_JDK1.8_LocalDate,LocalTime,LocalDateTime

public class Test09 {
    public static void main(String[] args) {
        //1.完成实例化
        //方法1:now()-->获取当前的日期,时间,日期+时间
        LocalDate localDate = LocalDate.now();
        System.out.println(localDate);
        LocalTime localTime = LocalTime.now();
        System.out.println(localTime);
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);
        //方法2:of()--设置指定的日期,时间,日期+时间
        LocalDate localDate1 = LocalDate.of(2022, 12, 12);
        System.out.println(localDate1);
        LocalTime localTime1 = LocalTime.of(12, 56, 36);
        System.out.println(localTime1);
        LocalDateTime localDateTime1 = LocalDateTime.of(1890, 12, 1, 15, 56, 36);
        System.out.println(localDateTime1);

        //localDate、localTime用的不如localDateTime多
        //下面讲解用localDateTime:
        //get****
        System.out.println(localDateTime.getYear());//2022
        System.out.println(localDateTime.getMonth());//JULY
        System.out.println(localDateTime.getMonthValue());//7
        System.out.println(localDateTime.getDayOfMonth());//28
        System.out.println(localDateTime.getDayOfWeek());//THURSDAY
        System.out.println(localDateTime.getHour());//21
        System.out.println(localDateTime.getMinute());//38
        System.out.println(localDateTime.getSecond());//35

        //不是set方法,叫with
        //体会不可变性
        LocalDateTime localDateTime2 = localDateTime.withMonth(8);
        System.out.println(localDateTime);//2022-07-28T21:45:15.634
        System.out.println(localDateTime2);//2022-08-28T21:45:15.634


        //提供了加减操作:
        //加:
        LocalDateTime localDateTime3 = localDateTime.plusMonths(4);
        System.out.println(localDateTime3);//2022-11-28T21:45:15.634
        System.out.println(localDateTime);//2022-07-28T21:45:15.634
        //减:
        LocalDateTime localDateTime4 = localDateTime.minusMonths(5);
        System.out.println(localDateTime4);//2022-02-28T21:48:04.670
        System.out.println(localDateTime);//2022-07-28T21:48:04.670
        
    }
}

【八】日期相关_DateTimeFormatter

public class Test10 {
    public static void main(String[] args) {
        //格式化类:DaTeTimeFormatter

        //方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;IOS_LOCAL_TIME
        DateTimeFormatter df1 = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
        //df1就可以帮助我们完成LocalDateTime和String之间的相互转换:
        //LocalDateTime-->String:
        LocalDateTime now = LocalDateTime.now();
        String str = df1.format(now);
        System.out.println(str);//2022-07-28T23:40:11.434

        //String --> LocalDateTime
        TemporalAccessor parse = df1.parse("2022-07-28T23:40:11.434");
        System.out.println(parse);


        //方式二:本地化相关的格式:oflocalizedDateTime()
        //参数:FormatStyle.LONG/FormatStyle.MEDIUM/FormatStyle.SHORT
        //FormatStyle.LONG     下午11时45分31秒
        //FormatStyle.MEDIUM       23:46:42
        //FormatStyle.SHORT         下午11:47
        DateTimeFormatter df2 = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);

        //LocalDateTime-->String:
        LocalDateTime now1 = LocalDateTime.now();
        String str2 = df2.format(now1);
        System.out.println(str2);

        //String --> LocalDateTime
        TemporalAccessor parse1 = df2.parse("下午11:47");
        System.out.println(parse1);

        //方式三:自定义的格式。如ofPatern("YYYY-MM-dd hh-mm-ss")-->重点,以后常用
        DateTimeFormatter df3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
        //LocalDateTime-->String:
        LocalDateTime now2 = LocalDateTime.now();
        String format = df3.format(now2);
        System.out.println(format);

        //String --> LocalDateTime
        TemporalAccessor parse2 = df3.parse("2022-07-28 11:52:58");
        System.out.println(parse2);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值