jdk8中新增的日期处理类LocalDate,LocalTime,LocalDateTime,ZoneId,ZonedDateTime详解
基本概念
时刻
- 所有计算机系统内部都用一个整数表示时刻,这个整数是距离格林尼治标准时间1970年1月1日0时0分0秒的毫秒数,可以理解时刻就是绝对时间,它与时区无关;
- 不同时区对同一时刻的解读,即年月日时分秒是不一样的;
时区
同一时刻,世界上各个地区的时间可能是不一样的,具体时间与时区有关,一共有24个时区,英国格林尼治是0时区,北京是东八区,也就是说格林尼治凌晨1点,北京是早上9点;
年历
我们都知道,中国有公历和农历之分,公历和农历都是年历,不同的年历,一年有多少月,每月有多少天,甚至一天有多少小时,这些可能都是不一样的,我们主要讨论公历。
LocalDate
获取当前日期
LocalDate today = LocalDate.now();
指定日期
LocalDate specifyDate = LocalDate.of(2014, 12, 25);
根据字符串获取
LocalDate endOfFeb = LocalDate.parse("2014-02-28");
取本月第1天
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth());
取本月第2天
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2);
取本月最后一天,再也不用计算是28,29,30还是31
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
取下一天
LocalDate nextDay = today.plusDays(1);
取2017年1月第一个周一
LocalDate firstMondayOf2015 = LocalDate.parse(“2017-01-01”).with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
取当年第一天
today.with(TemporalAdjusters.firstDayOfYear())
取当年最后一天
today.with(TemporalAdjusters.lastDayOfYear())
LocalTime
获取当前时间
LocalTime now = LocalTime.now();
指定时间
LocalTime mid = LocalTime.parse("12:00:00");
LocalDateTime
表示与时区无关的日期和时间信息,不直接对应时刻,需要通过时区转换
LocalDateTime转为指定格式的String
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime time = LocalDateTime.now();
String localTime = df.format(time);
指定格式String转为LocalDateTime
LocalDateTime ldt = LocalDateTime.parse("2017-09-28 17:07:05",df);
LocalDateTime时间差计算(计算天数)
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String pubTime="2021-03-27 16:49:15";
String pubEndTime="2022-03-27 16:48:15";LocalDateTime startTime = LocalDateTime.parse(pubTime, df);
LocalDateTime endTime = LocalDateTime.parse(pubEndTime, df);
Duration duration = Duration.between(startTime,endTime);
long count = duration.toMillis();
System.out.println(count);
System.out.println("相差天数:" + count / (3600 * 24 *1000));
ZoneId
默认时区
ZoneId.systemDefault()
指定时区
ZoneId.of("America/New_York")
可用时区
ZoneId.getAvailableZoneIds()
ZonedDateTime
创建ZonedDateTime,表示一个带有时区的时间
ZonedDateTime zbj = ZonedDateTime.now(); // 默认时区
ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 用指定时区获取当前时间
LocalDateTime转为带有时区的ZonedDateTime
LocalDateTime ldt = LocalDateTime.of(2019, 9, 15, 15, 16, 17);
ZonedDateTime zbj = ldt.atZone(ZoneId.systemDefault());//默认时区
ZonedDateTime zny = ldt.atZone(ZoneId.of("America/New_York"));//纽约时区
时区转换
中国时区转纽约时间
ZonedDateTime zbj = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
ZonedDateTime zny = zbj.withZoneSameInstant(ZoneId.of("America/New_York"));
ZonedDateTime转本地时间
ZonedDateTime zdt = ZonedDateTime.now();
LocalDateTime ldt = zdt.toLocalDateTime();//直接丢弃了时区信息
字符串转 ZonedDateTime
String zonedDateTime = "2022-07-02T16:00:00.000Z";
DateTimeFormatter sdf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(ZoneId.of("Asia/Shanghai"));
或
DateTimeFormatter sdf2 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(ZoneId.systemDefault());
ZonedDateTime dateTime = ZonedDateTime.parse(zonedDateTime,sdf2);
ZonedDateTime转字符串
ZonedDateTime zonedDateTime = ZonedDateTime.now();
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
String localTime = df.format(zonedDateTime);
jdk8中新增的日期处理类LocalDate,LocalTime,LocalDateTime,ZoneId,ZonedDateTime详解相关推荐
- 快速了解JDK8中的新日期时间类
积土成山,风雨兴焉:积水成渊,蛟龙生焉:积善成德,而神明自得,圣心备焉.故不积跬步,无以至千里,不积小流无以成江海.齐骥一跃,不能十步,驽马十驾,功不在舍.面对悬崖峭壁,一百年也看不出一条裂缝来,但用 ...
- time.h中的相关计时函数time,localtime,clock等详解
C++对时间的操作也有许多值得大家注意的地方.最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作.获取和显示等等的问题.下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法 ...
- html中字段是日期控件,jQuery日历插件datepicker用法详解
jQuery是一款不可多得的非常优秀的javascript脚本开发库,而基于其上的很多插件也是非常规范和卓越的,如果错过这番美景真是太可惜了,比如datepicker这个插件. 一般MIS系统的前端, ...
- python中函数分为哪四类_Python函数参数分类原理详解
1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,隔开 案列: # 利用函数的参数,定义一个可以完成任意两个数 ...
- JDK 6中新增的Java Console类功能概览
转载自 JDK 6中新增的Java Console类功能概览 JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备.如果你的Java程序要与Windows下的cmd或者L ...
- java中常用的日期工具类
java中常用的日期工具类 日期相关的类: package net.yto.ofclacct.core.util;import java.text.ParseException; import jav ...
- JAVA中的类和对象之this的详解
系列文章目录 第一章 JAVA中的类和对象之this的详解 目录 前言 一.为什么要有this引用 二.this的三种用法 1.this.成员变量 2.this.成员方法 3.this()调用其它的构 ...
- decimal类型对象里面定义什么类型_MySQL中Decimal类型和Float Double的区别(详解)
MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...
- (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解
转: https://www.cnblogs.com/Jeely/p/10762152.html web.xml 中的listener. filter.servlet 加载顺序及其详解 一.概述 1. ...
最新文章
- SAP 启用了HUM和QM的前提下,无法对采购订单的收货在质量放行前执行部分退货!
- wpf MVVM ViewModel 关闭View显示
- AC日记——凌乱的yyy 洛谷 P1803
- Django的CBV与FBV
- 高位字节 低位字节_所有字节从何而来?
- Zeppelie连接jdbc的使用
- 固定资产盘点管理系统的流程
- intouch负值显示0_intouch的若干个经典问题解答
- 传智:自己简单实现一个struts2框架的demo
- 【国产单片机】华大HC32L13系列使用printf进行调试(多种方法)
- C#合并Excel单元格
- iOS开发之在地图上绘制出你运动的轨迹
- Type-c快充加音频芯片深度解析(LDR6023C)
- 企业端点网络安全行业调研报告 - 市场现状分析与发展前景预测
- Carsim-问题Failed to start Solver: PATH_ID_OBJ(X) was set to Y; no corresponding value of XXXXX?
- 关于Matplotlib实验中出现NameError: name ‘rgb2gray‘ is not defined的解决
- 机器学习笔试精选 100 题
- 字节流和字符流的应用
- 关于错排公式的推导与应用
- CANN训练营第三季_昇腾CANN算子精讲课_TBE算子Sinh开发笔记_算子开发(二)
热门文章
- RMAN-06817: Pluggable Database CHARLESPDB cannot be backed up in NOARCHIVELOG mode.
- js中浏览器失焦获焦的几种结局方法
- 通过DCF模型对股票进行估值
- 数据库中什么是内联接、左外联接、右外联接?
- 性能测试——系统业务指标
- 【智能优化算法】基于融合改进 Logistics 混沌和正弦余弦算子的自适应 t 分布海鸥算法求解单目标优化问题附matlab代码
- 哪些专业不建议跨考计算机
- Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
- Devexpress Xtrareport 创建主从报表
- ABP框架Web API跨域问题的解决方案