欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK 8之前日期和时间类——System类, java.util.Date类,java.sql.Date类,SimpleDateFormat时间格式类,Calender时间操作类及JDK8说明

程序员文章站 2022-06-07 22:31:10
...

 

1.System类中的currentTimeMillis()  

返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差,简称时间戳。

    @Test
    public void test1(){
        long time = System.currentTimeMillis();
        //返回时间戳
        System.out.println(time);
    }

 

2.java.util.Date类 

           |---java.sql.Date类

1.两个构造器的使用

>构造器一:Date():创建一个对应当前时间的Date对象

>构造器二:创建指定毫秒数的Date对象

2.两个方法的使用

>toString():显示当前的年、月、日、时、分、秒

>getTime():获取当前Date对象对应的毫秒数。(时间戳)

 

    @Test
    public void test2(){
        //构造器一:Date():创建一个对应当前时间的Date对象
        Date date1 = new Date();
        System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019

        System.out.println(date1.getTime());//1550306204104

        //构造器二:创建指定毫秒数的Date对象
        Date date2 = new Date(1550306204104L);
        System.out.println(date2.toString());
    }

 

 3. java.sql.Date类

是.java.util.Date类 的子类。更多的用在数据库这一块。对应着数据库中的日期类型的变量,

>如何实例化

>如何将java.util.Date对象转换为java.sql.Date对象

    @Test
    public void test3(){
        //创建java.sql.Date对象
        java.sql.Date date3 = new java.sql.Date(35235325345L);
        System.out.println(date3);//1971-02-13

        //如何将java.util.Date对象转换为java.sql.Date对象
        	//情况一:子类转父类的,然后强转回子类
        Date date4 = new java.sql.Date(2343243242323L);
       	java.sql.Date date5 = (java.sql.Date) date4;
       	 //情况二:拿到父类生成的时间戳,放入子类构造器中
        Date date6 = new Date();
        java.sql.Date date7 = new java.sql.Date(date6.getTime());


    }

 

4.SimpleDateFormat 是对时间显示的格式进行调整的类。

 

SimpleDateFormat对日期Date类的格式化和解析,主体是两个操作:
1.1 格式化:日期 --->字符串
1.2 解析:格式化的逆过程,字符串 ---> 日期

2.SimpleDateFormat的实例化,重载的构造器,填入你想要的时间格式,输入对应时间。

@Test
    public void testSimpleDateFormat() throws ParseException {
        //实例化SimpleDateFormat:使用默认的构造器
        SimpleDateFormat sdf = new SimpleDateFormat();

        //格式化:日期 --->字符串
        Date date = new Date();
        System.out.println(date);

        String format = sdf.format(date);
        System.out.println(format);

        //解析:格式化的逆过程,字符串 ---> 日期
        String str = "19-12-18 上午11:43";
        Date date1 = sdf.parse(str);
        System.out.println(date1);

        //*************按照指定的方式格式化和解析:调用带参的构造器*****************
//        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        //格式化
        String format1 = sdf1.format(date);
        System.out.println(format1);//2019-02-18 11:48:27
        //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
        //否则,抛异常
        Date date2 = sdf1.parse("2020-02-18 11:48:27");
        System.out.println(date2);
    }

 

5.java.util.Calendar 类,相当时间的操作类,对日期进行增删改查。

原本Date类中就有增删改查操作,但其中的方法都被废弃的。替代的是jdk1.1的Calendar 类。

   首先Calendar类是一个抽象类,实例化可以调用其静态方法Calender.getInstance();返回的是其子类 GregorianCalender.

 @Test
    public void testCalendar(){
        //1.实例化
        //方式一:创建其子类(GregorianCalendar)的对象
        //方式二:调用其静态方法getInstance()
        Calendar calendar = Calendar.getInstance();
//        System.out.println(calendar.getClass());

        //2.常用方法
        //get()
        int days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));

        //set()
        //calendar可变性
        calendar.set(Calendar.DAY_OF_MONTH,22);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //add()
        calendar.add(Calendar.DAY_OF_MONTH,-3);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //getTime():日历类---> Date
        Date date = calendar.getTime();
        System.out.println(date);

        //setTime():Date ---> 日历类
        Date date1 = new Date();
        calendar.setTime(date1);
        days = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println(days);

    }

 

6. 就以jdk8之前上类,很难满足我们程序员对时间表达的需求。比如希望时间跟昼夜和四季有关等。

就以上类,还面临的问题有:

1.偏移性:Date中的年份是从1900开始的,而月份都是从0开始的。

2.格式化:格式化只对Date有用,Calendar则不行。时间各个类表示不同的操作,表现出它的复杂性了。

3.可变性:像日期和时间这样的类应该是不可变的。

4.她们不是线程安全的,不能处理闰秒等等......

他们都是说,对日期和时间的操作一直都是Java程序员最痛苦的地方之一

 

所以引入了jdk8中新日期时间的API 

java.time基础包

java.time.format格式解释包

java.time.chrono 对不同日历系统访问包

java.time.temporal 包括底层框架和扩展特性包

java.time.zone  包含时区支持类的包

 

说明一下:大多数开发者只会用到基础包和format包。因此,尽管更新了68公开类型,大多数开发着,大概只用到了其中的三分之一。

如:java.time.LocalDateTime,java.time.LocalDate,java.time.LocalTime;等等

 

一个程序员的自我修养和成长........

JDK 8之前日期和时间类——System类, java.util.Date类,java.sql.Date类,SimpleDateFormat时间格式类,Calender时间操作类及JDK8说明

 

 

相关标签: java