Java日期相关API的基本操作总结

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Java日期相关API的基本操作总结

馆主阿牛   2022-11-22 我要评论

前言

想大概总结一下日期相关API操作原因是对于日期的操作我们开发中还是很常见的,包括在数据库中保存日期,包括之前String类中对字符串的一些处理开发中都很常见,但大多和javascript以及python中的相关API一致我就没总结,对于日期这块今天还是大概总结一下吧!

JDK8之前

Date对象的使用

对于这个对象,现在他的许多方法已经过时了,我们只需要记住他的两个构造器以及两个方法的使用就行!

那么接下来在案例中看看这两个构造器的使用以及两个方法的使用:

public class Demo {
    public static void main(String[] args) {
        Date date1 = new Date();//构造器一 :创建一个对应当前日期的对象
        System.out.println(date1.toString()); //方法一:输出当前日期
        System.out.println(date1.getTime());  //方法二:输出当前日期对应的时间戳

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

但其实这里的Date有两个,这个需要我们注意:

一个是java.util.Date,另一个是他的子类java.sql.Date。第二个很明显是和我们的数据库有关的,数据库中保存日期则需要转换为java.sql.Date类型!

因此,java.util.Date和子类java.sql.Date之间的转换我们也要了解一下!

java.sql.Date 转换为 java.util.Date

这个很简单,由于 java.sql.Date是java.util.Date的子类,因此java.sql.Date转换为java.util.Date只需要进行对象的上转型操作:

java.util.Date date3 = new java.sql.Date(1668749175853L);
System.out.println(date3);

当然也是可以像下面的用getTime()方法转换成时间戳,然后用构造器最后完成转换!

java.util.Date 转换为 java.sql.Date

方式一:和多态有关,还是有局限性!

java.util.Date date3 = new java.sql.Date(1668749175853L); //上转型
java.sql.Date data4 = (java.sql.Date)date3; //下转型

方式二:我们常用的

Date date5 = new Date();
java.sql.Date date6 = new java.sql.Date(date5.getTime());
System.out.println(date6);//只会输出年月日

需要注意的是java.sql.Date只会输出年月日

格式化日期SimpleDateFormat类的使用

上面Date类的输出格式不够国际化看,对于我们来说看着不顺,因此,还需要格式化成我们需要的格式。

package 日期;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        SimpleDateFormat sdf =  new SimpleDateFormat(); //使用默认的构造器

        //格式化:日期 -》字符串
        Date date = new Date();
        String str = sdf.format(date);
        System.out.println(str);

        //解析:字符串 —》日期
        String str2 = "2022/11/18 下午2:30";
        Date date2 = null;
        try {
            date2  = sdf.parse(str2);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(date2);
    }
}

这个是默认的格式化!

下面写我们常用的格式化:

package 日期;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        SimpleDateFormat sdf =  new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

        //格式化:日期 -》字符串
        Date date = new Date();
        String str = sdf.format(date);
        System.out.println(str);

        //解析:字符串 —》日期
        String str2 = "2022-11-18 02:37:06";
        Date date2 = null;
        try {
            date2  = sdf.parse(str2);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println(date2);
    }
}

JDK8之后

之前说过,jdk8之前的Date大多说构造器已经过时了,因为哪些构造器使用时有偏移量,需要注意。

JDK 1.0中包含了一个 java.util.Date 类,但是它的大多数方法已经在 JDK 1.1引入 Calendar 类之后被弃用了。而 Calendar 并不比 Date 好多少。它们面临的问题是:

  • 可变性:像日期和时间这样的类应该是不可变的。
  • 偏移性:Date 中的年份是从1900开始的,而月份都从0开始。
  • 格式化只对 Date 有用, Calendar 则不行。
  • 此外,它们也不是线程安全的;不能处理闰秒等。

LocalDate 、LocalTime 、LocalDateTime的使用

LocalDate 、LocalTime 、LocalDateTime类是其中较重要的几个类,它们的实例是不可变的对象,分别表示使用 ISO -8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。下面通过小案例大概看看:

package 日期;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class Demo2 {
    public static void main(String[] args) {
        //now() 获取当前的日期,时间,时间+日期
        LocalDate localDate = LocalDate.now();
        LocalTime localTime = LocalTime.now();
        LocalDateTime localDateTime = LocalDateTime.now();

        System.out.println(localDate);
        System.out.println(localTime);
        System.out.println(localDateTime);

        System.out.println("---------------------");

        //of() 设置指定的年月日时分秒,没有偏移量
        LocalDateTime localDateTime1 = LocalDateTime.of(2022,10,1,12,12,43);
        System.out.println(localDateTime1);

        System.out.println("---------------------");

        //getXxx() 获取指定的年 月 周等等
        LocalDateTime localDateTime2 = LocalDateTime.now();
        System.out.println(localDateTime2.getMonth());
        System.out.println(localDateTime2.getHour());

        System.out.println("---------------------");

        //withXxx() 设置改变一些时间的值,能体现不可变性,方法返回值是改变后的
        LocalDateTime localDateTime3 = LocalDateTime.now();
        LocalDateTime localDateTime4 = localDateTime3.withHour(5);
        System.out.println(localDateTime3);
        System.out.println(localDateTime4);
    }
}

格式化日期 DateTimeFormatter 类的使用

关于这个类,我只写一下自定义格式化日期,这一点和SimpleDateFormat类的使用没啥区别:

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化:
String str = dateTimeFormatter.format(LocalDateTime.now());
System.out.println(str);
//解析
TemporalAccessor parse = dateTimeFormatter.parse("2022-10-01 12:12:43");
System.out.println(parse);

结语

当然,jdk8之前还有一个Calendar日历类的使用,感兴趣的可以去看看!

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们