Java 8 日期、时间操作

真放肆不在饮酒放荡,假矜持偏要慷慨激昂。万事留一线,江湖好相见–老郭经典语录

本篇描述LocalDate、LocalTime、LocalDateTime、TemporalAdjuster基本API的使用

一、概述

在Java8之前,日期时间API一直被开发者疯狂吐槽。槽点一:java.util.Date是可变类型槽点二:SimpleDateFormat非线程安全。。。
So 它来了Java8引入了一套全新的日期时间处理API,新的API基于ISO-8601标准日历系统。LocalDate、LocalTime、LocalDateTime 类是不可变的对象,分别表示使用ISO-8601日期日历系统的日期、时间、日期和时间
TemporalAdjuster 时间矫正器

注:ISO-8601日历系统是国际标准化组织指定的现代公民的日期和时间的表示法

二、初识 LocalDate

Java 8中的LocalDate 用于表示当天日期。和java.util.Date不同,它只有日期,不包含时间。

eg1: 获取当天日期

 public static void main(String[] args) {LocalDate date = LocalDate.now();System.out.println("当前日期=" + date); // 当前日期=2020-05-11}

eg2: 构造指定日期

调用工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例。

这个方法摒弃了以前API的头疼时间,比如年度起始于1900,月份是从0开始。。。

public static void main(String[] args) {LocalDate date = LocalDate.of(2000, 1, 1);System.out.println("LocalDate=" + date); // LocalDate=2000-01-01
}

eg3: 获取年月日信息

public static void main(String[] args) {LocalDate date = LocalDate.now();System.out.printf("%d年,%d月,%d日", date.getYear(),date.getMonthValue(), date.getDayOfMonth()); // 2020年,5月,11日
}

eg4: 比较两个日期是否相等

public static void main(String[] args) {LocalDate now = LocalDate.now();LocalDate date = LocalDate.of(2018, 9, 24);System.out.println("日期是否相等=" + now.equals(date));
}

三、初识-LocalTime

Java 8中的 LocalTime 用于表示当天时间。和java.util.Date不同,它只有时间,不包含日期。

eg1: 获取当前时间

public static void main(String[] args) {LocalTime time = LocalTime.now();System.out.println("当前时间=" + time); // 当前时间=00:17:19.648System.out.printf("%d时,%d分,%d秒", time.getHour(),time.getMinute() ,time.getSecond());// 0时,19分,38秒
}

四、比较与计算

Java 8提供了新的plusXxx()方法用于计算日期时间增量值,替代了原来的add()方法。新的API将返回一个全新的日期时间示例,需要使用新的对象进行接收。

eg1: 日期时间计算

public static void main(String[] args) {// 时间增量LocalTime time = LocalTime.now();LocalTime newTime = time.plusHours(2);  // 当前时间往前推2个小时System.out.println("newTime=" + newTime); // 日期增量LocalDate date = LocalDate.now();LocalDate newDate = date.plus(1, ChronoUnit.WEEKS); // 当前日期往前推一周System.out.println("newDate=" + newDate);
}

Java 8 提供了isAfter()isBefore()用于判断当前日期时间和指定日期时间的比较

eg2: 日期时间比较

public static void main(String[] args) {LocalDate now = LocalDate.now();LocalDate dateOld = LocalDate.of(2000, 1, 1);if (now.isAfter(dateOld)) {System.out.println("2000已经过去了");}LocalDate dateNew = LocalDate.of(2021, 1, 1);if (now.isBefore(dateNew)) {System.out.println("2021年还未到来");}}

五、时区

Java 8不仅分离了日期和时间,也把时区分离出来了。现在有一系列单独的类如ZoneId来处理特定时区,ZoneDateTime类来表示某时区下的时间。

eg: 创建带有时区的日期时间

public static void main(String[] args) {// 上海时间ZoneId shanghaiZoneId = ZoneId.of("Asia/Shanghai");ZonedDateTime shanghaiZonedDateTime = ZonedDateTime.now(shanghaiZoneId);// 东京时间ZoneId tokyoZoneId = ZoneId.of("Asia/Tokyo");ZonedDateTime tokyoZonedDateTime = ZonedDateTime.now(tokyoZoneId);DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");System.out.println("上海时间: " + shanghaiZonedDateTime.format(formatter));System.out.println("东京时间: " + tokyoZonedDateTime.format(formatter));}

六、格式化

eg1: 使用预定义格式解析与格式化日期

public static void main(String[] args) {// 解析日期String dateText = "20180924";LocalDate date = LocalDate.parse(dateText, DateTimeFormatter.BASIC_ISO_DATE);System.out.println("格式化之后的日期=" + date);// 格式化日期dateText = date.format(DateTimeFormatter.ISO_DATE);System.out.println("dateText=" + dateText);}

eg2:日期和字符串的相互转换

public static void main(String[] args) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 日期时间转字符串LocalDateTime now = LocalDateTime.now();String nowText = now.format(formatter);System.out.println("nowText=" + nowText);// 字符串转日期时间String datetimeText = "1999-12-31 23:59:59";LocalDateTime datetime = LocalDateTime.parse(datetimeText, formatter);System.out.println(datetime);}

LocalDateTime与上述用法大致相同不予冗余

七、初始-TemporalAdjuster

有时我们可能需要获取例如:将日期调整到“下个周日”等cz

TemporalAdjusters:该类通过静态方法提供了大量的常用TemporalAdjuster的实现

public static void main(String[] args) {LocalDate date = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY));System.out.println(date);
}

七、相关类说明

Instant         // 时间戳
Duration        // 持续时间、时间差
LocalDate       // 只包含日期,比如:2018-09-24
LocalTime       // 只包含时间,比如:10:32:10
LocalDateTime   // 包含日期和时间,比如:2018-09-24 10:32:10
Peroid          // 时间段
ZoneOffset      // 时区偏移量,比如:+8:00
ZonedDateTime   // 带时区的日期时间
Clock           // 时钟,可用于获取当前时间戳
java.time.format.DateTimeFormatter      //时间格式化类
TemporalAdjuster    // 矫正器

水平一般,能力有限,只能提供一些简单参考,深入学习还需自己尝试,承蒙各位不弃,欢迎批评补正

Java 8 日期、时间、时间矫正器操作相关推荐

  1. Java 8 日期和时间解读

    转载自 Java 8 日期和时间解读 现在,一些应用程序仍然在使用java.util.Date和java.util.Calendar API和它们的类库,来使我们在生活中更加轻松的处理日期和时间,比如 ...

  2. java国际化——日期和时间+排序

    [0]README 1) 本文部分文字描述转自 core java volume 2 , 测试源代码均为原创, 旨在理解 java国际化--日期和时间+排序 的基础知识 : [1]日期和时间 1)当格 ...

  3. Java 8 - 日期和时间实用技巧

    Java 8 – 日期和时间实用技巧 当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数. ...

  4. Java的日期与时间之如何计算业务代码的运行时间呢?

    转自: Java的日期与时间之如何计算业务代码的运行时间呢? 下文笔者讲述计算运行时间的方法分享,如下所示 实现思路:在业务开始时间和结束时间都加入获取时间的方法然后相减即可得到运行时间 例: lon ...

  5. Java的日期与时间java.time.Duration的简介说明

    转自: Java的日期与时间java.time.Duration的简介说明 下文笔者讲述Duration类的简介说明,如下所示 Duration类简介 Duration对象:表示两个Instant间的 ...

  6. Java 8日期和时间

    如今,一些应用程序仍在使用java.util.Date和java.util.Calendar API,包括使我们的生活更轻松地使用这些类型的库,例如JodaTime. 但是,Java 8引入了新的AP ...

  7. LocalDateTime - Java处理日期和时间

    java.time包提供了新的日期和时间的API,新的API主要包括:1. LocalDate/LocalTime/LocalDateTime2. ZoneDateTime/ZoneId3. Inst ...

  8. Date - Java处理日期和时间

    在计算机中如何表示日期和时间呢,我们可以想到有几种表示方式,一种是2016-11-20 8::15:01 GMT+08:00,或者我们用其他的时区,比如GMT+00:00标准时区,或者 America ...

  9. 深入了解Java 8日期和时间API

    在这篇文章中,我们将更深入地了解通过Java 8获得的新的Date / Time API( JSR 310 ). 请注意,本文主要由显示新API功能的代码示例驱动. 我认为这些示例是不言自明的,因此我 ...

最新文章

  1. centos7.2 Apache+PHP7.2+Mysql5.6环境搭建
  2. MyBatis常用配置解析-environments标签
  3. php字符串search,js获取location.search每个查询字符串的值
  4. 前端学习(500):水平居中布局得第二种方式
  5. Win7性能信息和工具在哪打开
  6. 质数之和c语言编程,C程序检查一个数字是否可以表示为两个质数之和
  7. java多状态机_一个java状态机样例的代码
  8. HDU 3416 Marriage Match IV
  9. 2A锂电池充电管理芯片,具有恒压/恒流充电模式的充电管理 IC
  10. office2010 错误1706 解决办法
  11. Deep-Learned Regularization and Proximal Operator for Image Compressive Sensing
  12. 零知识证明java实现
  13. 频点换算计算器android,LTE频率频点计算器免费版
  14. mac使用mysql出现的错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  15. 无监督学习-案例分析:利率期限结构
  16. props的动态传值 以及 v-for列表渲染
  17. 手风琴效果——原生JS
  18. SELECT高级查询——连接查询、子查询(多表数据查询)
  19. mysql运动会报名系统_运动会报名系统的简易实现
  20. 谷歌研究员Francois Chollet:有良知的AI研究人员不应该在Facebook工作

热门文章

  1. 合同签订后双方都没有履行可以作废吗
  2. 微信小程序项目实例——我有一支画笔(画画)
  3. Python中局部放大图案例
  4. Qtcreator常用的快捷键
  5. 全球与中国搅拌站燃烧器市场现状及未来发展趋势
  6. 编码器M法测速仿真(Simulink)
  7. 服务器同时在线人数承载,服务器承载:空间或服务器支持在线人数为多少
  8. matlab控制系统仿真论文,基于MATLAB的异步电动机直接转矩控制系统仿真毕业论文...
  9. 关于android文件路径 转 Bitmap
  10. python + selenium 刷B站播放量