基本概念

时刻

  • 所有计算机系统内部都用一个整数表示时刻,这个整数是距离格林尼治标准时间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详解相关推荐

  1. 快速了解JDK8中的新日期时间类

    积土成山,风雨兴焉:积水成渊,蛟龙生焉:积善成德,而神明自得,圣心备焉.故不积跬步,无以至千里,不积小流无以成江海.齐骥一跃,不能十步,驽马十驾,功不在舍.面对悬崖峭壁,一百年也看不出一条裂缝来,但用 ...

  2. time.h中的相关计时函数time,localtime,clock等详解

    C++对时间的操作也有许多值得大家注意的地方.最近,在技术群中有很多网友也多次问到过C++语言中对时间的操作.获取和显示等等的问题.下面,在这篇文章中,笔者将主要介绍在C/C++中时间和日期的使用方法 ...

  3. html中字段是日期控件,jQuery日历插件datepicker用法详解

    jQuery是一款不可多得的非常优秀的javascript脚本开发库,而基于其上的很多插件也是非常规范和卓越的,如果错过这番美景真是太可惜了,比如datepicker这个插件. 一般MIS系统的前端, ...

  4. python中函数分为哪四类_Python函数参数分类原理详解

    1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,隔开 案列: # 利用函数的参数,定义一个可以完成任意两个数 ...

  5. JDK 6中新增的Java Console类功能概览

    转载自  JDK 6中新增的Java Console类功能概览 JDK 6中提供了java.io.Console类专用来访问基于字符的控制台设备.如果你的Java程序要与Windows下的cmd或者L ...

  6. java中常用的日期工具类

    java中常用的日期工具类 日期相关的类: package net.yto.ofclacct.core.util;import java.text.ParseException; import jav ...

  7. JAVA中的类和对象之this的详解

    系列文章目录 第一章 JAVA中的类和对象之this的详解 目录 前言 一.为什么要有this引用 二.this的三种用法 1.this.成员变量 2.this.成员方法 3.this()调用其它的构 ...

  8. decimal类型对象里面定义什么类型_MySQL中Decimal类型和Float Double的区别(详解)

    MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...

  9. (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解

    转: https://www.cnblogs.com/Jeely/p/10762152.html web.xml 中的listener. filter.servlet 加载顺序及其详解 一.概述 1. ...

最新文章

  1. SAP 启用了HUM和QM的前提下,无法对采购订单的收货在质量放行前执行部分退货!
  2. wpf MVVM ViewModel 关闭View显示
  3. AC日记——凌乱的yyy 洛谷 P1803
  4. Django的CBV与FBV
  5. 高位字节 低位字节_所有字节从何而来?
  6. Zeppelie连接jdbc的使用
  7. 固定资产盘点管理系统的流程
  8. intouch负值显示0_intouch的若干个经典问题解答
  9. 传智:自己简单实现一个struts2框架的demo
  10. 【国产单片机】华大HC32L13系列使用printf进行调试(多种方法)
  11. C#合并Excel单元格
  12. iOS开发之在地图上绘制出你运动的轨迹
  13. Type-c快充加音频芯片深度解析(LDR6023C)
  14. 企业端点网络安全行业调研报告 - 市场现状分析与发展前景预测
  15. Carsim-问题Failed to start Solver: PATH_ID_OBJ(X) was set to Y; no corresponding value of XXXXX?
  16. 关于Matplotlib实验中出现NameError: name ‘rgb2gray‘ is not defined的解决
  17. 机器学习笔试精选 100 题
  18. 字节流和字符流的应用
  19. 关于错排公式的推导与应用
  20. CANN训练营第三季_昇腾CANN算子精讲课_TBE算子Sinh开发笔记_算子开发(二)

热门文章

  1. RMAN-06817: Pluggable Database CHARLESPDB cannot be backed up in NOARCHIVELOG mode.
  2. js中浏览器失焦获焦的几种结局方法
  3. 通过DCF模型对股票进行估值
  4. 数据库中什么是内联接、左外联接、右外联接?
  5. 性能测试——系统业务指标
  6. 【智能优化算法】基于融合改进 Logistics 混沌和正弦余弦算子的自适应 t 分布海鸥算法求解单目标优化问题附matlab代码
  7. 哪些专业不建议跨考计算机
  8. Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect
  9. Devexpress Xtrareport 创建主从报表
  10. ABP框架Web API跨域问题的解决方案