java时间相关的API总结

java时间相关的API总结

一、JDK8之前的API

1.System类的currentTimeMillis()

①获取当前时间对应的毫秒数,long类型,时间戳

②当前时间与1970年1月1日0分0秒之间的毫秒数

③常用来计算时间差

二、两个Date类

1.java.util.Date

java 复制代码
 //创建一个基于当前系统时间的Date实例
        Date date1=new Date();
        //Mon Oct 23 21:31:54 CST 2023
        System.out.print(date1.toString());

        long milliTimes=date1.getTime();
        //1698068033128
        System.out.print("\n对应的毫秒数"+milliTimes);

        //创建一个基于指定时间戳的Date的实例
        Date date2=new Date(1698068033128L);
        System.out.print("\n"+date2.toString());

2.java.sql.Date(对应数据库中Date)

java 复制代码
java.sql.Date date1=new java.sql.Date(1698068033128L);
        //2023-10-23
        System.out.print(date1.toString());
        //1698068033128
        System.out.print(date1.getTime());

三、SimpleDateFormat

SimpleDateFormat类:用于时间日期的格式化和解析

格式化:日期--->字符串

解析:字符串--->日期

java 复制代码
public void test3() throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat();
        //格式化:日期to字符串
        Date date1=new Date();
        String strData = sdf.format(date1);
        //23-10-23 下午9:48
        System.out.print(strData);

        //解析:字符串to日期
        Date date2 = sdf.parse("23-10-23 下午9:48");
        //Mon Oct 23 21:48:00 CST 2023
        System.out.print(date2);

        SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date3=new Date();
        String strData2=sdf2.format(date3);
        //2023-10-23 21:54:13
        System.out.print(strData2);
        Date date4=sdf2.parse("2023-10-23 21:54:13");
        //Mon Oct 23 21:54:13 CST 2023
        System.out.print(date4);
    }

4.java.util.Calendar(日历)

Date类的大部分Api被废弃了,替换为Calendar

java 复制代码
public void test5(){
        /**
         * 实例化,由于Calendar是抽象类,所以我们需要创建其子类的实例
         * 这里我们通过Calendar的静态方法
         */
        Calendar calendar=Calendar.getInstance();
        //get(int field)
        //23,这一月的第多少天
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH)+"\n");
        //296,这一年的第多少天
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR)+"\n");
        //set(int field,xx)
        calendar.set(Calendar.DAY_OF_MONTH,25);
        //25
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

        //add(int field,xx)
        calendar.add(Calendar.DAY_OF_MONTH,3);
        //28
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        //Calendar to Date
        Date date=calendar.getTime();
        //Sat Oct 28 22:11:21 CST 2023
        System.out.println(date);
    }

四、JDK8:新的时间API

之前时间API存在的问题
可变性: 像日期和时间这样的类应该是不可变的
偏移性: Date中的年份是从1900开始的,而月份都是从0开始的
格式化: 格式化只对Date有用,Calendar则不行

此外,他们也不是线程安全的,不能处理闰秒等

为了解决问题引入新的API。

1.本地日期时间:LocalDate,LocalTime,LocalDateTime

java 复制代码
public void test6(){
        LocalDate localDate=LocalDate.now();
        LocalTime localTime= LocalTime.now();
        LocalDateTime localDateTime=LocalDateTime.now();
        //2023-10-24
        System.out.println(localDate);
        //21:58:26.449
        System.out.println(localTime);
        //2023-10-24T21:58:26.449
        System.out.println(localDateTime);

        //of()
        LocalDate localDate1=LocalDate.of(2000,11,2);
        LocalDateTime localDateTime1= LocalDateTime.of(2000,9,11,20,24,30);
        //2000-11-02
        System.out.println(localDate1);
        //2000-09-11T20:24:30
        System.out.println(localDateTime1);

        //getXXX()
        LocalDateTime localDateTime2=LocalDateTime.now();
        //24
        System.out.println(localDateTime2.getDayOfMonth());

        //withXXX() 体现不可变性
        LocalDateTime localDateTime3 = localDateTime2.withDayOfMonth(15);
        //2023-10-15T22:06:25.410
        System.out.println(localDateTime3);

        LocalDateTime localDateTime4 = localDateTime2.plusDays(2);
        //2023-10-26T22:07:38.908
        System.out.println(localDateTime4);
    }

2.瞬时:Instant

时间线上的一个瞬时点,可能被用来记录应用程序的事件的事件戳,与Date有点类似

java 复制代码
public void test7(){
        Instant instant=Instant.now();
        //2023-10-24T14:14:43.069Z
        System.out.println(instant);

        Instant instant1 = Instant.ofEpochMilli(121313213123L);
        //1973-11-05T02:06:53.123Z
        System.out.println(instant1);
        long milli = instant.toEpochMilli();
        //1698157087034
        System.out.println(milli);

    }

3.日期时间格式化:DateTimeFormatrer

java 复制代码
public void test8(){
        //自定义格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime localDateTime=LocalDateTime.now();
        String format = dateTimeFormatter.format(localDateTime);
        //2023-10-24 10:23:02
        System.out.println(format);

        //解析 字符串->日期时间
        TemporalAccessor parse = dateTimeFormatter.parse("2023-10-24 10:23:02");
        LocalDateTime from = LocalDateTime.from(parse);
        //2023-10-24T10:23:02
        System.out.println(from);

    }
相关推荐
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹2 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭3 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫3 小时前
泛型(2)
java
超爱吃士力架3 小时前
邀请逻辑
java·linux·后端
南宫生3 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石3 小时前
12/21java基础
java
李小白663 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp4 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶4 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb