Java常用类之 JDK 8之前的日期时间API 和 8中新日期时间API

Java常用类

文章目录

  • 三、JDK 8之前的日期时间API
    • 3.1、currentTimeMillis
    • 3.2、两个Date类的使用
    • 3.3、SimpleDateFormat
    • 3.4、Calendar日历类的使用
  • 四、JDK 8中新日期时间API
    • 4.1、LocalDate、LocalTime、LocalDateTime的使用
    • 4.2、Instant瞬时类
    • 4.3、DateTimeFormatter

三、JDK 8之前的日期时间API

JDK 8 之前日期和时间的API测试:

3.1、currentTimeMillis

public void test1(){long time = System.currentTimeMillis();//返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。//称为时间戳:精确到毫秒,基本不会重复System.out.println(time);
}

3.2、两个Date类的使用

java.util.Data类(父类)
*      |---java.sql.Date类(子类)
*
*      1.两个构造器的使用
*          >构造器一:Date():创建一个对应当前时间的Date对象
*          >构造器二:创建指定毫秒数的Date对象
*
*      2.两个方法的使用
*          >toString():显示当前的年、月、日时、分、秒
*          >getTime(): 获取当前Date对象对应的毫秒数(时间戳)
*
*      3.java.sql.Date对应着数据库中的日期类型的变量
*          >如何实例化  java.sql.Date date3 = new java.sql.Date(2341655156L);
*          >将java.util.Date对象转换为java.sql.Date对象:两种方法:① 强转; ② 使用date6.getTime()

详细代码如下:

public void test2(){//构造器一:Date():创建一个对应当前时间的Date对象Date date1 = new Date();System.out.println(date1.toString());//Fri May 05 22:46:50 CST 2023System.out.println(date1.getTime());//1683298010350//构造器二:创建指定毫秒数的Date对象Date date2 = new Date(1603298010050L);System.out.println(date2.toString());//实例化java.sql.Date date3 = new java.sql.Date(2341655156L);System.out.println(date3);//1970-01-28//将java.util.Date对象转换为java.sql.Date对象://情况一:强转Date date4 = new java.sql.Date(2341655156L);java.sql.Date date5 = (java.sql.Date) date4;//情况二:使用getTime()Date date6 = new Date();java.sql.Date date7 = new java.sql.Date(date6.getTime());System.out.println(date7);}

3.3、SimpleDateFormat

SimpleDateFormate的使用:SimpleDateFormate对日期Date类的格式化和解析

重点关注:

1.两个操作
1.1 格式化:日期--->字符串	方法:① format()输出
1.2 解析:格式化的逆过程:字符串-->日期 方法:① 用parse() ② sdf1.parse("2023-05-06 12:23:59"):要求字符串必须符合SimpleDateFormat识别的格式(通过构造器的参数体现)2.SimpleDateFormate的实例化① 使用默认的构造器② 按照指定的格式进行可视化

具体代码如下:

public void test() throws ParseException {//----------------------实例化SimpleDateFormat:使用默认的构造器----------------------SimpleDateFormat sdf = new SimpleDateFormat();//空参构造器//格式化:日期--->字符串Date date = new Date();System.out.println(date);String format = sdf.format(date);System.out.println(format);//2023/5/6 12:19//解析:格式化的逆过程:字符串-->日期String str = "2023/5/6 12:19";Date date1 = sdf.parse(str); //用parse()System.out.println(date1);//----------------------按照指定的格式进行可视化----------------------SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//格式化String format1 = sdf1.format(date);System.out.println(format1);//2023-05-06 12:23:59//解析:要求字符串必须符合SimpleDateFormat识别的格式(通过构造器的参数体现)//否则,抛异常Date date2 = sdf1.parse("2023-05-06 12:23:59");System.out.println(date2);
}

3.4、Calendar日历类的使用

1.获取Calendar实例的方法

① 使用Calendar.getInstance()方法
Calendar calendar = Calendar.getInstance();//造Calendar日历类的对象② 调用它的子类GregorianCalendar的构造器。很少使用

2.重点掌握几个常用方法:

1.get() int days = calendar.get(Calendar.DATE);
2.set() 重新设置天数
3.add(): 加或减几天
4.getTime(): 日历类--->Date
5.setTime(): Date--->日历类
public void testCalendar(){Calendar calendar = Calendar.getInstance();System.out.println(calendar.getClass());//获取该类//2.常用方法//get()int days = calendar.get(Calendar.DATE);System.out.println(days);System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//set() 重新设置天数calendar.set(Calendar.DAY_OF_MONTH, 22);//修改日期,无返回值,将值本身进行修改int days2 = calendar.get(Calendar.DATE);System.out.println(days2);//add(): 加或减 几天calendar.add(Calendar.DAY_OF_MONTH, -3);int days3 = calendar.get(Calendar.DATE);System.out.println(days3);//getTime(): 日历类--->DateDate date = calendar.getTime();System.out.println(date);//setTime(): Date--->日历类Date date1 = new Date();calendar.setTime(date1);int days4 = calendar.get(Calendar.DATE);System.out.println(days4);
}

注意:

获取月份时:一月是0,二月是1,以此类推,12月是11

获取星期时:周日是1,周二是2 , 。。。。周六是7

四、JDK 8中新日期时间API

而Calendar面临的问题是:

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

因此,新的 java.time 中包含了所有关于本地日期(LocalDate)、本地时间 (LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime) 和持续时间(Duration)的类。

4.1、LocalDate、LocalTime、LocalDateTime的使用

说明:
1.LocalDateTime相较于其它两个,使用频率要高
2.类似于Calendar

1.重点掌握几个常用方法:

1.now():获取当前的日期、时间、日期+时间
2.of(): 设置只当的年、月、日、时、分、秒是没有偏移量的(获取指定的时间)
3.withXxx():设置相关的属性(体现不可变性)
4.+ 或 - 时间

具体如下:

public void test1(){//通过now()创建该类//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);//of(): 设置只当的年、月、日、时、分、秒是没有偏移量的(获取指定的时间)LocalDateTime localDateTime1 = LocalDateTime.of(2023, 5, 7, 11, 23, 25);System.out.println(localDateTime1);//getXxx(): 获取一些属性System.out.println(localDateTime.getDayOfMonth());//7System.out.println(localDateTime.getHour());//11System.out.println(localDateTime.getDayOfYear());//127System.out.println(localDateTime.getNano());//221116700  纳秒System.out.println(localDateTime.getMonth());//MAY//体现不可变性//withXxx():设置相关的属性LocalDate localDate1 = localDate.withDayOfMonth(28);System.out.println(localDate);//不可变性System.out.println(localDate1);LocalDateTime withHour = localDateTime.withHour(4);//改成4点System.out.println(withHour);//+ 或 - 时间LocalDateTime months = localDateTime.plusMonths(2);//加 2 个月System.out.println(months);LocalDateTime localDateTime2 = localDateTime.minusMonths(2);System.out.println(localDateTime2);}

4.2、Instant瞬时类

Instance的使用类似于java.util.Date类

1.重点掌握几个常用方法:

1.now(): 获取本初子午线对应的标准时间  Instant instant = Instant.now();
2.atOffset(ZoneOffset.ofHours(8)):添加时间的偏移量
3.toEpochMilli(): 获取自197011000秒(UTC)开始的毫秒数--->Date()getTime()
4.ofEpochMilli():通过给定的毫秒数,获取Instance实例 ---Date(long millis)

具体如下:

public void test2(){//now(): 获取本初子午线对应的标准时间Instant instant = Instant.now();System.out.println(instant);//2023-05-07T03:56:53.041850400Z//atOffset(ZoneOffset.ofHours(8)):添加时间的偏移量OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));System.out.println(offsetDateTime);//2023-05-07T11:57:29.668196600+08:00//toEpochMilli(): 获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数--->像Date()的getTime()long milli = instant.toEpochMilli();System.out.println(milli);//1683431993283//ofEpochMilli():通过给定的毫秒数,获取Instance实例 ---像Date(long millis)Instant instant1 = Instant.ofEpochMilli(1683431993283L);System.out.println(instant1);
}

4.3、DateTimeFormatter

DateTimeFormatter: 格式化或解析日期、时间, 类似于SimpleDateFormat

1.重点掌握几个常用方法:

方式一:预定义的标准格式。如ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
方式二:本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
方式三:重点!!!自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)1.自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
2.格式化:format(LocalDateTime.now()
3.解析:parse("2023-05-07 12:27:07")

具体如下:

public void test3(){//方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIMEDateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;//重点:方式三:自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");//格式化:format(LocalDateTime.now()String str1 = formatter3.format(LocalDateTime.now());System.out.println(str1);//2023-05-07 12:27:07//解析:parse("2023-05-07 12:27:07")TemporalAccessor accessor = formatter3.parse("2023-05-07 12:27:07");System.out.println(accessor);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上海亚商投顾:沪指放量反弹 医药、AI概念股集体走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数早间震荡反弹,午后集体拉升涨超1%,深成指一度涨超1.5%,随后涨幅略…

【JDK 8-Lambda】3.2 自定义函数式编程实战

一、自定义lambda接口流程 需求 : 定义一个可以使用加减乘除的接口 Stage 1:定义一个函数式接口 Stage 2:写一个方法,输入需要操做的数据和接口 Stage 3:运行结果 一、自定义lambda接口流程 需求 : 定义一个可以使用加减乘除的…

Web 器学习笔记(基础)

Filter 过滤器 概念:表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一 作用:顾名思义可以过滤资源的请求,并实现特殊的需求 Filter 接口及它核心的 doFilter() 方法(执行前就是…

激光焊接汽车PP塑料配件透光率测试仪

随着汽车主机厂对车辆轻量化的需求越来越强烈,汽车零部件轻量化设计、制造也成为汽车零部件生产厂商的重要技术指标。零部件企业要实现产品的轻量化,在材料指定的情况下,要通过产品设计优化、产品壁厚减小和装配方式的优化来解决。使用PP材料…

Rocketmq并发和顺序消费的失败重试机制

文章目录 问题并发消费触发时机客户端发起请求 CONSUMER_SEND_MSG_BACKBroker处理CONSUMER_SEND_MSG_BACK请求 顺序消费Q&A消费的时候是一批的消息, 如果其中某条消费失败了,是所有的消息都会被重试吗?用户可以自己控制重试次数、重试间隔时间吗?批量消费消息,…

Kubernetes网络揭秘:看完你就懂了

一、Master集群网络 master集群的网络比较简单,和通常的负载均衡集群一样。多个节点的apiserver的ip与端口(6443)使用负载均衡的ip与端口。在master/node节点join时均使用此负载均衡的ip与端口,这样就是master节点的集群网络。 master 节点之间的网络&a…

arm栈推导

按照栈生长方向分:可以分为递增栈(向高地址生长);递减栈(向低地址生长) 按照sp执行位置来分:满栈(sp指向栈顶元素的位置);空栈(sp指向即将入栈的…

利用爬虫技术自动化采集汽车之家的车型参数数据

导语 汽车之家是一个专业的汽车网站,提供了丰富的汽车信息,包括车型参数、图片、视频、评测、报价等。如果我们想要获取这些信息,我们可以通过浏览器手动访问网站,或者利用爬虫技术自动化采集数据。本文将介绍如何使用Python编写…

MATLAB中findpeaks函数用法

目录 语法 说明 示例 在MATLAB中,findpeaks函数用于查找信号中的峰值(peaks)。以下是findpeaks函数的基本语法、说明以及示例: 语法 [pks,locs] findpeaks(x) [pks,locs] findpeaks(x, Name, Value)说明 参数说明 x&…

JVM性能调优-一.思路方向

一、调优策略 对于GC的性能主要有2个方面的指标:吞吐量throughput(工作时间不算gc的时间占总的时间比)和暂停pause(gc发生时app对外显示的无法响应)。 1、调优的目的 调优的最终目的当然增大吞吐量,减少暂…

勒索病毒最新变种.halo勒索病毒来袭,如何恢复受感染的数据?

摘要: .halo勒索病毒已成为数字世界中的威胁,通过高级加密技术将文件锁定,并要求支付赎金。本文91数据恢复将深入介绍.halo勒索病毒的工作原理,提供解锁被感染文件的方法,以及探讨如何有效预防这一威胁。如果您正在经…

87 # express 应用和创建应用的分离

创建应用的过程和应用本身要进行分离。路由和创建应用的过程也做一个分离。 下面实现创建应用的过程和应用本身要进行分离: express.js const Application require("./application");function createApplication() {// 通过类来实现分离操作return ne…

unity UDP 通信

客户端 接收端 : using System; using System.IO; using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using UnityEngine; using UnityEngine.UI;public cla…

常见音视频、流媒体开源编解码库及官网(四十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

Android rom开发:9.0系统上实现4G wifi 以太网共存

framework层修改网络优先级,4G > wifi > eth 修改patch如下: diff --git a/frameworks/base/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/frameworks/base/services/core/java/com/android/server/connectivit…

Unity中Shader抓取屏幕并实现扭曲效果(优化)

文章目录 前言一、在之前顶点着色器的输入中,放弃了使用结构体传入,而是直接从应用程序阶段传入参数,这样写的话,对于程序来说,不方便扩张,所以需要对其进行修改实现1、定义结构体用于传入顶点坐标系2、因为…

力扣1、两数之和

转到力扣 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可…

开始撸 Android 源码

启动找工作模式,发现无比困难。搁在往日,大龄程序员找工作都是一件困难的事情,加上今年形势很差,更是难上加难。关键是我这十几年来主攻的浏览器内核方向,需求量更是几乎为零。在 BOSS 直聘上以 Chromium 为关键词&…

华为云云耀云服务器L实例评测|Git 私服搭建指南

前言 本文为华为云云耀云服务器L实例测评文章,测评内容是 云耀云服务器L实例 Git 私有服务器搭建指南 系统配置:2核2G 3M Ubuntu 20.04 我们平时在使用代码托管服务的时候,可能某些代码托管平台对成员有限制,或是由于内容原因会对…

教你如何清理 Docker 存储驱动的磁盘占用空间

Author:rab 有时候你会发现,你的 Docker 业务容器虽然做了数据持久化,且数据持久化的磁盘空间占用并不大,但是 Docker 的 Overlay2 目录占用却很大。我们知道 Overlay2 是 Docker 的存储驱动,也是 Docker 默认的存储驱…