04_使用API_日期和时间

JDK 8 之前传统的日期、时间

Date 类
  • 代表的是日期和时间
import java.util.Date;public class Test {public static void main(String[] args) {// 1. 创建一个Data对象,代表系统当前时间信息的Date d = new Date();System.out.println(d);  // 输出的是日期与当前的时间信息// 2. 拿到时间毫秒值long time = d.getTime();System.out.println(time);  // 输出毫秒值// 3. 把时间毫秒值转换成对象日期:2s之后的时间是多少time += 2 * 1000;  // 2 ms * 1000 == 2sDate d2 = new Date(time);// 4. 直接把日期对象的时间,通过setTime方法进行修改Date d3 = new Date();d3.setTime(time);System.out.println(d3);}
}
SimpleDateFormat 类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test {public static void main(String[] args) throws ParseException {// 1. 准备一些时间Date d = new Date();System.out.println(d);  // 日期+时间long time = d.getTime();System.out.println(time);  // 时间毫秒值// 2. 格式化日期对象,和时间毫秒值SimpleDateFormat obj = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String res = obj.format(d);String res2 = obj.format(time);System.out.println(res);System.out.println(res2);// 3. 常见时间格式/**   y   年*   M   月*   d   日*   H   时*   m   分*   s   秒*   EEE 星期几*   a   上午/下午* */// 4. 将已被格式化的时间字符串,转变回原来的时间对象String dateStr = "2023--15-20 15:35:21";SimpleDateFormat obj2 = new SimpleDateFormat("yyyy--MM-dd HH:mm:ss");Date d2 = obj2.parse(dateStr);System.out.println(d2);  // 日期+时间}
}
Calendar 类
  • Calendar 代表的是系统此刻时间对应的日历
  • 通过它可以单独获取、修改时间中的年、月、日、时、分、秒等
import java.util.Calendar;
import java.util.Date;public class Test {public static void main(String[] args) {// 1. 得到系统此刻时间对应的日历对象Calendar obj = Calendar.getInstance();System.out.println(obj);// 2. 获取日历中的某个信息int year = obj.get(Calendar.YEAR);System.out.println(year);  // 输出年份int days = obj.get(Calendar.DAY_OF_YEAR);System.out.println(days);  // 一年365天中的第x天// 3. 拿到日历中记录的日期对象Date d = obj.getTime();System.out.println(d);// 4. 拿到时间毫秒值long time = obj.getTimeInMillis();System.out.println(time);// 5. 修改日历中的某个信息obj.set(Calendar.MONTH, 9);  // 月份是从0开始计算,所以这里是修改为10月System.out.println(obj.get(Calendar.MONTH));  // 9obj.set(Calendar.DAY_OF_YEAR, 250);  // 修改为一年中的第250天System.out.println(obj.get(Calendar.DAY_OF_YEAR));  // 250// 6. 为某个信息增加或者减少多少obj.add(Calendar.DAY_OF_YEAR, 100);obj.add(Calendar.DAY_OF_YEAR, -100);System.out.println(obj.get(Calendar.DAY_OF_YEAR));  // 250}
}

JDK 8 开始新增的日期、时间

它们的优点
  • 设计更合理,功能丰富,使用更方便
  • 都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间
  • 线程安全
  • 能精确到毫秒、纳秒
LocalDate、LocalTime、LocalDateTime
  • LocalDate:代表本地日期(年、月、日、星期)
  • LocalTime:代表本地时间(时、分、秒、纳秒)
  • LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)
// LocalDateimport java.time.LocalDate;public class Test {public static void main(String[] args) {// 1. 获取本地日期对象(不可变对象)LocalDate date = LocalDate.now();System.out.println(date);  // 2023-11-24// 2. 获取日期对象中的信息int year = date.getYear();int month = date.getMonthValue();int day = date.getDayOfMonth();int dayOfYear = date.getDayOfYear();  // 一年365天中的第几天int dayOfWeek = date.getDayOfWeek().getValue();  // 星期几// 3. 修改信息(本质不是修改原来的,而是新建了一个对象)LocalDate newDate = date.withYear(2050);System.out.println(date);  // 2023-11-24System.out.println(newDate);  // 2050-11-24// 4. 把某个信息加(或者减)多少(本质不是修改原来的,而是新建了一个对象)LocalDate date1 = date.plusYears(10);LocalDate date2 = date.minusYears(10);// 5. 指定日期的LocalDate对象LocalDate date3 = LocalDate.of(2035, 10, 1);// 6. 判断2个日期对象,是否相等,在前还是在后System.out.println(date1.equals(date2));  // falseSystem.out.println(date1.isAfter(date2));  // trueSystem.out.println(date1.isBefore(date2));  // false}
}
// LocalTimeimport java.time.LocalTime;public class Test {public static void main(String[] args) {// 1. 获取本地时间对象(不可变对象)LocalTime time = LocalTime.now();System.out.println(time);  // 23:56:28.720309500// 2. 获取时间对象中的信息int hour = time.getHour();int minute = time.getMinute();int second = time.getSecond();int nano = time.getNano();  // 纳秒// 3. 修改信息(本质不是修改原来的,而是新建了一个对象)LocalTime time1 = time.withHour(8);// 4. 把某个信息加(或者减)多少(本质不是修改原来的,而是新建了一个对象)LocalTime time2 = time.plusHours(8);LocalTime time3 = time.minusHours(8);// 5. 指定时间的LocalTime对象LocalTime time4 = LocalTime.of(12, 15);// 6. 判断2个时间对象,是否相等,在前还是在后System.out.println(time1.equals(time2));System.out.println(time1.isAfter(time2));System.out.println(time1.isBefore(time2));}
}
// LocalDateTimeimport java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;public class Test {public static void main(String[] args) {LocalDateTime dateTime = LocalDateTime.now();System.out.println(dateTime);  // 2023-11-25T10:08:23.410530300// 1. 可以获取日期和时间的全部信息int year = dateTime.getYear();int month = dateTime.getMonthValue();int day = dateTime.getDayOfMonth();int dayOfYear = dateTime.getDayOfYear();int dayOfWeek = dateTime.getDayOfWeek().getValue();int hour = dateTime.getHour();int minute = dateTime.getMinute();int second = dateTime.getSecond();int nano = dateTime.getNano();// 2. 修改时间LocalDateTime dateTime1 = dateTime.withYear(2035);// 3. 加减LocalDateTime dateTime2 = dateTime.plusYears(5);LocalDateTime dateTime3 = dateTime.minusYears(5);// 4. 获取指定日期和时间的LocalDateTime对象LocalDateTime dateTime4 = LocalDateTime.of(2055, 6, 1, 12, 30, 15, 3000);System.out.println(dateTime4);  // 2055-06-01T12:30:15.000003// 5. 判断日期时间对象是否相等,在前还是在后System.out.println(dateTime1.equals(dateTime2));System.out.println(dateTime1.isAfter(dateTime2));System.out.println(dateTime1.isBefore(dateTime2));// 6. 可以把LocalDateTime对象,转为LocalDate和LocalTimeLocalDate date = dateTime.toLocalDate();LocalTime time = dateTime.toLocalTime();System.out.println(date);  // 2023-11-25System.out.println(time);  // 10:20:04.680774700}
}
时区
import java.time.Clock;
import java.time.ZoneId;
import java.time.ZonedDateTime;public class Test {public static void main(String[] args) {// 1. 获取系统默认的时区ZoneId obj = ZoneId.systemDefault();System.out.println(obj);  // GMT+08:00System.out.println(obj.getId());  // GMT+08:00// 2. 显示 Java 支持的全部时区 IdSystem.out.println(ZoneId.getAvailableZoneIds());  // [Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8, Africa/Nairobi......]// 3. 把某个时区的id封装成ZoneId对象ZoneId obj1 = ZoneId.of("America/Cuiaba");// 4. 获取某个时区的ZonedDatetime对象ZonedDateTime obj2 = ZonedDateTime.now(obj1);System.out.println(obj2);  // 输出 America/Cuiaba 时区当前的时间,如下所示// 2023-11-24T22:50:05.534176500-04:00[America/Cuiaba]// 5. 获取世界标准时间ZonedDateTime obj3 =  ZonedDateTime.now(Clock.systemUTC());System.out.println(obj3);  // 2023-11-25T02:54:06.575812300Z// 6. 获取系统默认时区的ZonedDateTime对象ZonedDateTime obj4 = ZonedDateTime.now();System.out.println(obj4);  // 2023-11-25T10:55:46.410093200+08:00[GMT+08:00]}
}
Instant (时刻/时间戳)
  • 传统的 Date 类只能精确到毫秒,并且是可变对象
  • 新增的 Instant 类可以精确到纳秒,并且是不可变对象(推荐使用 Instant 替代 Date )
import java.time.Instant;public class Test {public static void main(String[] args) {// 1. 创建 Instant 的对象,获取此"刻"信息(该信息由两部分组成:"总秒数" + "不够1秒的纳秒数")Instant obj = Instant.now();System.out.println(obj);  // 2023-11-25T03:05:00.754167800Z// 2. 获取总秒数long second = obj.getEpochSecond();System.out.println(second);// 3. 获取纳秒数int nano = obj.getNano();System.out.println(nano);// 4. 其他基本操作,类比之前的方法,它们的方法有共通性,而且都是不可变对象Instant instant1 = Instant.now();Instant instant2 = Instant.now();System.out.println(instant1.equals(instant2));  // 判断是否相等System.out.println(instant1.isAfter(instant2));System.out.println(instant1.isBefore(instant2));Instant instant3 = instant1.plusSeconds(5);  // +5 秒Instant instant4 = instant1.minusSeconds(5);  // -5 秒}
}
DateTimeFormatter (日期时间格式化器)
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class Test {public static void main(String[] args) {// 1. 创建一个日期时间格式化器对象DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");// 2. 对时间进行格式化// 2.0 准备一个时间LocalDateTime dateTime = LocalDateTime.now();  // 创建日期时间对象System.out.println(dateTime);  // 输出该对象 2023-11-25T11:24:22.524304100// 2.1 方法一String str1 = formatter.format(dateTime);  // 格式化这个日期时间对象System.out.println(str1);  // 输出格式化后的结果 2023年11月25日 11:24:22// 2.2 方法二String str2 = dateTime.format(formatter);System.out.println(str2);  // 2023年11月25日 11:24:22// 4. 解析时间:一般使用 LocalDateTime 提供的解析方法来解析String str = "2023年11月25日 11:25:25";LocalDateTime obj = LocalDateTime.parse(str, formatter);System.out.println(obj);  // 2023-11-25T11:25:25}
}
Period(一段时期)

用于计算两个 LocalDate 对象相差的年数、月数、天数

import java.time.LocalDate;
import java.time.Period;public class Test {public static void main(String[] args) {LocalDate start = LocalDate.of(2030, 8, 6);LocalDate end = LocalDate.of(2030, 8, 20);// 1. 创建 Period 对象,封装两个日期对象Period obj = Period.between(start, end);// 2. 通过 Period 对象获取两个日期对象相差的信息System.out.println(obj.getYears());  // 0System.out.println(obj.getMonths());  // 0System.out.println(obj.getDays());  // 14}
}
Duration(持续时间)

用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持 LocalTime、LocalDateTime、Instant 等时间

import java.time.Duration;
import java.time.LocalDateTime;public class Test {public static void main(String[] args) {LocalDateTime start = LocalDateTime.of(2028, 5, 10, 12, 15, 30);LocalDateTime end = LocalDateTime.of(2028, 5, 25, 8, 0, 0);// 1. 得到 Duration 对象Duration obj = Duration.between(start, end);// 2. 获取两个时间对象间隔的信息System.out.println(obj.toDays());  // 间隔多少天System.out.println(obj.toHours());  // 间隔多少小时System.out.println(obj.toMinutes());  // 间隔多少分System.out.println(obj.toSeconds());  // 间隔多少秒System.out.println(obj.toMillis());  // 间隔多少毫秒System.out.println(obj.toNanos());  // 间隔多少纳秒}
}

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

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

相关文章

Oracle(2-8)Configuring the Database Archiving Mode

文章目录 一、基础知识1、Redo Log History2、NOARCHIVELOG Mode 非归档模式3、ARCHIVELOG Mode 归档模式4、Changing the Archiving Mode 更改归档模式![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d6a09f9a6de24de7bbcdad90b8d6b9ca.png)5、Auto and Manual Ar…

MybtisPlus快速开发(从controller到mapper)

创建新项目 写好配置文件 server:port: 8905#配置MP控制台打印日志 mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplspring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:m…

接手项目要做的事项

总结:在接手别人的项目时,至少应该自己整理并绘画四个图 1、产品脑图:帮助你理解产品的功能; 2、UML时序图:帮助你源代码的核心技术实现; 3、整体业务泳道图:帮助你从整体上熟悉业务的流程&a…

联想M7400W激光打印机加粉清零方法

基本参数 产品定位:多功能商用一体机 产品类型:黑白激光多功能一体机 涵盖功能:打印、复印、扫描 最大处理幅面:A4 耗材类型:鼓粉分离 耗材容量:硒鼓LD2451 12000页,墨粉LT2451 1500页、L…

Android 11.0 修改Android系统的通知自动成组的数量

场景: Android 系统对显示在通知列表中的同一个应用的通知进行分组管理,即相同的packageName中,当通知数量达到系统默认指定的数量时,会自动成一组. Android 11.0 中系统默认的自动成组数如下所示: 核心路径 : frameworks/base/core/res/res/values/config.xml<!-- 来自同…

LaTex语法实现多种矩阵

矩阵 0 1 1 0 \begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix} 01​10​ \begin{matrix}0 & 1 \\1 & 0 \end{matrix}小括号矩阵 ( 0 1 1 0 ) \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix} (01​10​) \begin{pmatrix}0 & 1 \\1 & 0 \end{pm…

腾讯面试笔试题2023.11.30

给定一个由整数组成的非空数组所表示的非负整数如[1,2,3]&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 &#xff08;要求只能操作数组&#xff0c;不…

webpack的plugin和loader的区别

Webpack 的 Plugin 和 Loader 是用来处理模块和资源的两个不同的概念。 Loader 是Webpack 的模块转换器&#xff0c;用于将某种特定格式的内容转换为Webpack 可以处理的模块。它可以在构建流程中将各种类型的文件&#xff08;如 CSS、图片、ES6、TypeScript 等&#xff09;转换…

每日一练2023.11.30——谁先倒【PTA】

题目链接&#xff1a;谁先倒 题目要求&#xff1a; 划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为&#xff1a;每人口中喊出一个数字&#xff0c;同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和&#xff0c;谁就输了&#xff0…

PyCharm安装教程(详细步骤)

一、软件简介 PyCharm是一款Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如&#xff0c; 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外&#xff0c;该IDE提供了一些高…

在Linux上搭建JavaWeb项目运行环境

文章目录 安装JDK安装Tomcat安装数据库 安装JDK 安装Oracle官方的JDK比较麻烦&#xff0c;我们在此处选择安装开源社区维护的openjdk。他们俩的差别不大且兼容。 安装Tomcat 我们把本地下载好的 tomcat.zip 包拖到Linux页面上&#xff0c;让Linux也有一个zip包&#xff0c;再…

Springboot整合mybatis_plus报错办法

问题详情&#xff1a;java.lang.IllegalArgumentException: Invalid value type for attribute ‘factoryBeanObjectType’: 问题背景&#xff1a; springboot 3.2.0 mybatis_plus:3.5.4.1 解决方法1&#xff08;经验证&#xff09;&#xff1a; 导入mybatis-spring包即可 &…

Python 计算图像差分的三种方式(cv2,torchvision,numpy)

前言&#xff1a;最近在可视化图像残差时&#xff0c;发现几种不同的差分方法&#xff0c;下面分别给出每种差分方法的实现方式&#xff0c;并比较不同方法之间的差异。 目录 1️⃣ cv22️⃣ PIL & torchvision3️⃣ PIL & numpy 目标&#xff1a;对于给定的下述两张图…

MacOS + Android Studio 通过 USB 数据线真机调试

环境&#xff1a;Apple M1 MacOS Sonoma 14.1.1 软件&#xff1a;Android Studio Giraffe | 2022.3.1 Patch 3 设备&#xff1a;小米10 Android 13 一、创建测试项目 安卓 HelloWorld 项目: 安卓 HelloWorld 项目 二、数据线连接手机 1. 手机开启开发者模式 参考&#xff1…

代码随想录算法训练营第四十八天【动态规划part09】 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 当前房屋偷与不偷取决于前一个房屋是否被偷了 动规五部曲 确定dp数组及其下标含义&#xff1a;考虑下标i&#xff08;包括i&#xff09…

Qt串口助手

QT5 串口助手 ​ 由于C课程作业的需要&#xff0c;用QT5写了个简陋的串口助手。只作为一个简单的案例以供参考&#xff0c;默认读者具有C基础和了解简单的Qt操作。 功能展示 【用QT写了个简单的串口助手】 准备工作 Qt自带有<QSerialPort> 库, 可以方便地配置和调用…

lv11 嵌入式开发 轮询与中断13

1 CPU与硬件的交互方式 轮询 CPU执行程序时不断地询问硬件是否需要其服务&#xff0c;若需要则给予其服务&#xff0c;若不需要一段时间后再次询问&#xff0c;周而复始 中断 CPU执行程序时若硬件需要其服务&#xff0c;对应的硬件给CPU发送中断信号&#xff0c;CPU接收到中…

常见预处理

预处理 ——# 预处理功能&#xff1a;宏定义、文件包含、条件编译。 预处理命令 #include&#xff08;文件包含命令&#xff09; #define&#xff08;宏定义命令&#xff09; #undef #if&#xff08;条件编译&#xff09; #ifdef #ifndef #elif #endif defined函数&#xff0…

python爬取robomaster论坛数据,作为后端数据

一. 内容简介 python爬取robomaster论坛数据&#xff0c;作为后端数据 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3代码 三.主要流程 3.1 接口分析 # 接口分析 # 全部数据 # https://bbs.robomaster.com/forum.php?modforumdisplay&fid63 2…

LeetCode343. Integer Break

文章目录 一、题目二、题解 一、题目 Given an integer n, break it into the sum of k positive integers, where k > 2, and maximize the product of those integers. Return the maximum product you can get. Example 1: Input: n 2 Output: 1 Explanation: 2 1 …