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

   2023-02-09 学习力0
核心提示:目录前言JDK8之前Date对象的使用格式化日期SimpleDateFormat类的使用JDK8之后LocalDate 、LocalTime 、LocalDateTime的使用格式化日期 DateTimeFormatter 类的使用结语前言想大概总结一下日期相关API操作原因是对于日期的操作我们开发中还是很常见的,包括在

前言

想大概总结一下日期相关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);
    }
}

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

但其实这里的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);
    }
}

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

这个是默认的格式化!

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

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

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

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

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

格式化日期 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);

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

结语

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

原文地址:https://blog.csdn.net/qq_57421630/article/details/127919959
 
标签: Java 日期 API
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • #新闻拍一拍# Oracle 调研如何避免让 Java 开发者投奔 Rust 和 Kotlin | Linux 中国
    #新闻拍一拍# Oracle 调研如何避免让 Java 开发
     导读:• 英特尔对迟迟不被 Linux 主线接受的 SGX Enclave 进行了第 38 次修订 • ARM 支持开源的 Panfrost Gallium3D 驱动本文字数:977,阅读时长大约:1分钟作者:硬核老王Oracle 调研如何避免让 Java 开发者投奔 Rust 和 KotlinOracle 委托分析公司 Omd
    03-08
  • oogle的“ JavaScript杀手” Dart 与JavaScript的比较
    oogle的“ JavaScript杀手” Dart 与JavaScript
    JavaScript通常被称为浏览器脚本语言,但它也已扩展到许多服务器端和移动应用程序开发环境。JS已经存在了将近20年,可以肯定地说它确实是一种成熟且稳定的编程语言。在Facebook发布React和React Native框架之后,JS变得越来越流行。JavaScript具有自己的软件
    03-08
  • sf02_选择排序算法Java Python rust 实现
    Java 实现package common;public class SimpleArithmetic {/** * 选择排序 * 输入整形数组:a[n] 【4、5、3、7】 * 1. 取数组编号为i(i属于[0 , n-2])的数组值 a[i],即第一重循环 * 2. 假定a[i]为数组a[k](k属于[i,n-1])中的最小值a[min],即执行初始化 min =i
    02-09
  • Delphi XE6 通过JavaScript API调用百度地图
    Delphi XE6 通过JavaScript API调用百度地图
    参考昨天的内容,有朋友还是问如何调用百度地图,也是,谁让咱都在国内呢,没办法,你懂的。 首先去申请个Key,然后看一下百度JavaScript的第一个例子:http://developer.baidu.com/map/jsdemo.htm下一步,就是把例子中的代码,移动TWebBrower中。 unit Unit
    02-09
  • JavaScript面向对象轻松入门之抽象(demo by ES5
    抽象的概念  狭义的抽象,也就是代码里的抽象,就是把一些相关联的业务逻辑分离成属性和方法(行为),这些属性和方法就可以构成一个对象。  这种抽象是为了把难以理解的代码归纳成与现实世界关联的概念,比如小狗这样一个对象:属性可以归纳出“毛色”、
    02-09
  • Java与Objective-C的渊源 objective-c和c++的区
    java创始成员Patrick Naughton回忆,通常人们会认为Java是学Modula-3和C+,其实这些都是谣传,而对Java影响比较大的则是Objective-C:单 继承、动态绑定和加载、类对象、纯虚函数、反射、原始类型包装类等。Java的接口直接抄自OC的协议。  Objective-C是扩
    02-09
  • Java项目导出数据为 PDF 文件的操作代码
    Java项目导出数据为 PDF 文件的操作代码
    目录Java项目如何导出数据为 PDF 文件?一、代码结构如下二、代码说明1、添加依赖 pom.xml2、HTML模板文件 audit_order_record.html3、添加字体4、PDF 导出工具类5、导出接口6、打开浏览器测试三、效果图Java项目如何导出数据为 PDF 文件?一个小需求,需要将
  • 盘点Java中延时任务的多种实现方式 java 延时队列怎么实现
    盘点Java中延时任务的多种实现方式 java 延时队
    目录场景描述实现方式一、挂起线程二、ScheduledExecutorService 延迟任务线程池三、DelayQueue(延时队列)四、Redis-为key指定超时时长,并监听失效key五、时间轮六、消息队列-延迟队列场景描述①需要实现一个定时发布系统通告的功能,如何实现? ②支付超时
  • Java Semaphore信号量使用分析讲解
    Java Semaphore信号量使用分析讲解
    目录前言介绍和使用API介绍基本使用原理介绍获取许可acquire()释放许可release()总结前言大家应该都用过synchronized 关键字加锁,用来保证某个时刻只允许一个线程运行。那么如果控制某个时刻允许指定数量的线程执行,有什么好的办法呢? 答案就是JUC提供的信
  • 【Java并发入门】03 互斥锁(上):解决原子性问题
    【Java并发入门】03 互斥锁(上):解决原子性
    原子性问题的源头是线程切换Q:如果禁用 CPU 线程切换是不是就解决这个问题了?A:单核 CPU 可行,但到了多核 CPU 的时候,有可能是不同的核在处理同一个变量,即便不切换线程,也有问题。所以,解决原子性的关键是「同一时刻只有一个线程处理该变量,也被称
    02-09
点击排行