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

    }
相关推荐
雷神乐乐14 分钟前
File.separator与File.separatorChar的区别
java·路径分隔符
小刘|19 分钟前
《Java 实现希尔排序:原理剖析与代码详解》
java·算法·排序算法
逊嘘38 分钟前
【Java语言】抽象类与接口
java·开发语言·jvm
morris1311 小时前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员1 小时前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU1 小时前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie61 小时前
在IDEA中使用Git
java·git
Elaine2023911 小时前
06 网络编程基础
java·网络
G丶AEOM2 小时前
分布式——BASE理论
java·分布式·八股