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

目录
  • 前言
  • JDK8之前
    • Date对象的使用
    • 格式化日期SimpleDateFormat类的使用
  • JDK8之后
    • LocalDate 、LocalTime 、LocalDateTime的使用
    • 格式化日期 DateTimeFormatter 类的使用
  • 结语

前言

想大概总结一下日期相关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日历类的使用,感兴趣的可以去看看!

到此这篇关于Java日期相关API的基本操作总结的文章就介绍到这了,更多相关Java日期API内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java检查日期字符串是否合法的方法总结

    目录 WHY HOW 1.使用 DateFormat 检查 2.使用 LocalDate 检查 3.使用 DateTimeFormatter 检查 4.使用 Apache 出品的 commons-validator 检查 总结 WHY 后端接口在接收数据的时候,都需要进行检查.检查全部通过后,才能够执行业务逻辑.对于时间格式,我们一般需要检查这么几方面: 字符串格式是否正确,比如格式是不是yyyy-MM-dd 时间在合法范围内,比如我们需要限定在一个月内的时间 字符串可以解析为正常的时间,比如

  • java日期时间格式化@JsonFormat与@DateTimeFormat的使用

    如果要使用 @JsonFormat 这个注解的话,需要在项目中添加 jackson 相关的依赖包; 因为 @JsonFormat 注解不是 Spring 自带的注解,所以使用该注解前需要添加 jackson 相关的依赖包.当然,如果是 SpringBoot 项目就不需要自己手动添加依赖了,因为在 spring-boot-start-web 下已经包含了 jackson 相关依赖. <!-- https://mvnrepository.com/artifact/com.fasterxml.jack

  • Java如何利用LocalDate获取某个月的第一天与最后一天日期

    目录 问题描述: 使用TemporalAdjusters方法实现 使用getDayOfMonth()方法实现 补充:使用LocalDateTime也可以实现相关功能 java获取指定日期当月和下个月的第一天 总结 问题描述: 以一个月为周期进行查询时,如果用户没有选择查询的月份,我们想要默认查询当月或上个月的数据,这时,如何获取到一个月的第一天和最后一天日期呢? 以下介绍两种方式采用LocalDate格式日期的实现,以及采用LocalDateTime格式日期的实现.直接上代码! 使用Tempor

  • C#日期格式化的几个要点小结

    日期格式化 标准 DateTime 格式字符串 如果格式字符串只包含下表列出的某个单个格式说明符,则它们被解释为标准格式说明符.如果指定的格式字符是单个字符并且不包含在下表中,则引发异常.如果格式字符串在长度上比单个字符长(即使多余的字符是空白),则格式字符串被解释为自定义格式字符串.请注意,这些格式说明符产生的模式受"区域选项"控制面板中的设置的影响.具有不同区域性或不同日期与时间设置的计算机将显示不同的模式. 格式字符串显示的时间和日期分隔符由与当前区域性的 DateTimeFor

  • Java Date(日期)对象进行格式化的思路详解

    Java日期时间格式化的概念 我们在日常的开发过程中常常会碰到关于日期时间的计算与存储问题,比如我们要把一个当前时间类型转换成字符串类型,我们会直接使用Util包下的Date数据类型(java.util.Date)来创建时间对象,例如:Date date = new Date();但如果我们对其对象进行打印会发现时间的数据值如下:Fri Jul 24 16:02:44 GMT+08:00 2020,这是一个标准的带时区的系统时间,这样的数据并不方便我们的阅读与管理,在此我们就可以考虑能否将时间进

  • C#日期控件datetimepicker保存空值的三种方法

    方法一(推荐): 设置datetimepicker的属性ShowCheckBox为true 在窗口初始化时候,添加代码this.datetimepicker1.Checked = false; 保存日期值入库的时候,就可以根据if(this.datetimepicker1.Checked ==false),保存空值. 方法二: 在窗口初始化函数中添加: 复制代码 代码如下: this.dateTimePicker1.Format=DateTimePickerFormat.Custom; this

  • C#日期格式强制转换方法(推荐)

    C#编写winform程序时,用到的,格式强转,存储到数据库,数据库连接那块就不写了 希望对大家有帮助,欢迎评论互相分享技术! //日期格式强制转化 string str1 = deStartDate.EditValue.ToString(); DateTime date; DateTime.TryParse(str1, out date); str1 = date.ToString("yyyy/MM/dd"); string str2 = deDueDate.EditValue.To

  • 如何将Java与C#时间进行互相转换

    JAVA中的日期计算方法 JAVA统计从1970年1月1日起的毫秒的数量表示日期.也就是说,例如,1970年1月2日,是在1月1日 后的86,400,000毫秒.同样的,1969年12月31日是在1970年1月1日前86,400,000毫秒.Java的Date类使用long类 型纪录这些毫秒值.因为long是有符号整数,所以日期可以在1970年1月1日之前,也可以在这之后.Long类型表示的最大正值和最大负值可以轻松的 表示290,000,000年的时间,这适合大多数人的时间要求. Java中可

  • C#日期格式字符串的相互转换操作实例分析

    本文实例讲述了C#日期格式字符串的相互转换操作.分享给大家供大家参考,具体如下: 方法一:Convert.ToDateTime(string) string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方法二:Convert.ToDateTime(string, IFormatProvider) DateTime dt; DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo(); dtForm

  • java实现在原有日期时间上加几个月或几天

    目录 如何在原有日期时间上加几个月或几天 在原有的时间上添加几个月 在原有的时间上添加几天 在日期加上特定的天数或者时间 附Calendar 字段说明 !!!特别提醒 如何在原有日期时间上加几个月或几天 在原有的时间上添加几个月 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 Date date = new Date(); System.out.println(df.format(da

随机推荐