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);

    }
相关推荐
AskHarries7 分钟前
Spring Boot集成jacoco实现单元测试覆盖统计
java·spring boot·后端
liuliuliuliuyujie10 分钟前
ArrayList练习
java
全职计算机毕业设计13 分钟前
基于springboot的工作绩效管理系统的设计与实现+文档
java·spring boot·后端
java66666888817 分钟前
Java中的内存数据库与缓存技术
java·数据库·缓存
量化交易学徒30 分钟前
【DevOps】Java内存分配与JVM参数详解
java·开发语言·jvm·参数调优
六月的雨__31 分钟前
房屋租赁管理小程序的设计
java·sql·学习·小程序
zouhuu1 小时前
面试题001-Java-Java基础
java·java面试·java面试题·java基础题
weixin_8368695201 小时前
使用Java构建智能物联网系统
java·物联网·struts
Mero技术博客1 小时前
第四节:如何使用注解方式从IOC中获取bean(自学Spring boot 3.x的第一天)
java·spring boot·后端·spring·微服务
花花鱼1 小时前
spring boot (shiro)+ websocket测试连接不上的简单检测处理
java·spring boot·后端