新的日期和时间API

新的日期和时间类解决了Date和Calendar类出现的问题

浅尝

LocalDate

日期类

LocalDate of = LocalDate.of(2018, 7, 13);
LocalDate now = LocalDate.now();
int year = now.getYear();
Month month = now.getMonth();
int dayOfMonth = now.getDayOfMonth();

LocalTime

时间类

LocalTime of = LocalTime.of(12, 30, 50);
LocalTime now = LocalTime.now();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();

LocalDateTime

日期时间类

LocalDateTime now = LocalDateTime.now();
LocalDateTime of = LocalDateTime.of(2012, 7, 23, 12, 50, 23);

Instant

适用于机器的日期时间类

Instant now = Instant.now();
// 3秒之后再加上10亿纳秒 -> 4秒
Instant instant = Instant.ofEpochSecond(3, 1_000_000_000);
Instant instant1 = Instant.ofEpochSecond(4);
System.out.println(instant.getEpochSecond());
System.out.println(instant1.getEpochSecond());

Duration和Period

Duration:主要用于以秒和纳秒衡量时间的长短

Period:主要支持年、月或者日的方式对多个时间单位


image-1

深入

修改

  1. 直接修改
LocalDate now = LocalDate.now();
LocalDate localDate = now.withYear(2012);
LocalDate localDate1 = now.withMonth(12);
LocalDate localDate2 = now.withDayOfMonth(23);
LocalDate with = now.with(ChronoField.DAY_OF_MONTH, 23);
  1. 间接修改
// 加
LocalDate localDate3 = now.plusYears(2);
// 减
LocalDate localDate4 = now.minusYears(2);
now.plus(10, ChronoUnit.YEARS);
now.minus(10,ChronoUnit.YEARS);

image-2

TemporalAdjuster

将日期调整到下个周日、下个工作日,或者是本月的最后一天。这时,你可以使用重载版本的with方法,向其传递一个提供了更多定制化选择的TemporalAdjuster对象,更加灵活地处理日期。

LocalDate now = LocalDate.now();
LocalDate with = now.with(TemporalAdjusters.nextOrSame(DayOfWeek.FRIDAY));
LocalDate with1 = now.with(TemporalAdjusters.lastDayOfMonth());

image-20200906181209990

DateTimeFormatter

DateTimeFormatter实例都是线程安全的

LocalDate now = LocalDate.now();
String format = now.format(DateTimeFormatter.BASIC_ISO_DATE);
LocalDate parse = LocalDate.parse("20201025", DateTimeFormatter.BASIC_ISO_DATE);

DateTimeFormatter类支持一个静态工厂方法,它可以按照某个特定的模式创建格式器。

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");
// 地区
DateTimeFormatter dateTimeFormatter1 = DateTimeFormatter.ofPattern("dd/MM/YYYY", Locale.CHINESE);

DateTimeFormatterBuilder类还提供了更复杂的格式器,你可以选择恰当的方法,一步一步地构造自己的格式器

 DateTimeFormatterBuilder dateTimeFormatterBuilder = new DateTimeFormatterBuilder()
                .appendLiteral("该月")
                .appendText(ChronoField.MONTH_OF_YEAR)
                .appendLiteral("的")
                .appendText(ChronoField.DAY_OF_MONTH)
                .appendLiteral("号");
 DateTimeFormatter dateTimeFormatter2 = dateTimeFormatterBuilder.toFormatter();

时区

时区是按照一定的规则将区域划分成的标准时间相同的区间。

//创建一个时区
ZoneId of = ZoneId.of("Asia/Shanghai");
//将一个老的时区对象转换为ZoneId
ZoneId zoneId = TimeZone.getDefault().toZoneId();
//localDateTime 和 instant像话转换
LocalDateTime localDateTime = LocalDateTime.of(2012,1,1,1,1,10);
ZoneOffset zoneOffset = ZoneOffset.of("Asia/Shanghai");
Instant instant = localDateTime.toInstant(zoneOffset);
LocalDateTime localDateTime1 = LocalDateTime.ofInstant(instant, of);

Java8 日期和时间类的更多相关文章

  1. 跟上Java8 - 日期和时间实用技巧

    原文出处:王爵nice 当你开始使用Java操作日期和时间的时候,会有一些棘手.你也许会通过System.currentTimeMillis() 来返回1970年1月1日到今天的毫秒数.或者使用Dat ...

  2. 跟上Java8 - 日期和时间实用技巧,转自知乎王爵nice

    作者:王爵nice链接:https://zhuanlan.zhihu.com/p/28133858来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 当你开始使用Java操 ...

  3. Java8 日期和时间实用技巧

    新的日期API ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则 Instant: 用来表示时间线上的一个点 LocalDate: 表示没有时区的日期, Lo ...

  4. Java知多少(77)日期和时间类

    Java 的日期和时间类位于 java.util 包中.利用日期时间类提供的方法,可以获取当前的日期和时间,创建日期和时间参数,计算和比较时间. Date 类 Date 类是 Java 中的日期时间类 ...

  5. Java8与传统的日期和时间类详解

    一.传统的日期时间类(Date和Calendar) 1. Date类 这里的Date是位于java.util包下的类,而不是java.sql包下的date类,Date对象即包含日期也包含时间,从JDK ...

  6. Java8 日期、时间操作

    一.简介 在Java8之前,日期时间API一直被开发者诟病,包括:java.util.Date是可变类型,SimpleDateFormat非线程安全等问题.故此,Java8引入了一套全新的日期时间处理 ...

  7. java 日期与时间类

    1.Date类:  https://www.cnblogs.com/huangminwen/p/5994927.html 2.DateFormat和SimpleDateFormat (simple简单 ...

  8. Java8 日期和时间API

    LocalDate.LocalTime.Instant.Duration.Period 1.1使用LocalDate和LocalTime 1.1.1LocalDate的创建方式和相关方法使用示例 @T ...

  9. Java8 日期与时间 API

    在 Java 中,想处理日期和时间时,通常都会选用 java.util.Date 这个类进行处理.不过不知道是设计者在当时没想好还是其它原因,在 Java 1.0 中引入的这个类,大部分的 API 在 ...

随机推荐

  1. 眼见为实 — CSS的overflow属性

    1. overflow属性 CSS的overflow属性指定当内容溢出一个元素的框,会发生什么.举个栗子: <!DOCTYPE html> <html> <head> ...

  2. ECS7天实践进阶训练营Day2:基于阿里云ECS部署MediaWiki

    一.概述 MediaWiki是全球最著名的开源Wiki程序,运行于PHP+MySQL环境,MediaWiki从2002年被作为维基百科的系统软件,并由大量其他应用实例(例如萌娘百科),因此MediaW ...

  3. 在Springboot中写使用jsp

    jsp其实可以看成一种模板语言,在Springboot中我们同样可以使用jsp.我们可以把引入jsp的过程分为三步: 第一步:POM文件加依赖: <!--引入springboot内嵌的tomca ...

  4. java.util.Scanner中hasNext()方法和next()方法的区别

    先说结论: 两者均根据空格划分数据 两者在没有数据输入时均会等待输入 next()方法会将空格划分的数据依次输出,运行一次,输出一个 hasNext()方法会跟着next()方法移动,当前数据不为空, ...

  5. 漏洞重温之XSS(中)

    漏洞重温之XSS(中) XSS挑战之旅 level8-level13 level8 第八关开局,发现button从搜索变成了友情链接,发现该页面情况跟前面不同,先右键查看代码,再进行尝试. 上测试代码 ...

  6. Selenium数据驱动测试模型和实例

    模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了. 数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变. 装载数据的方式可以是列表. ...

  7. idea的热加载与热部署

    一:热加载与热部署     热部署的意思就是不用手动重启环境,修改类后,项目会自动重启.但是如果项目比较大,重启也需要耗时十几秒左右.     热加载意为不需要重新启动,修改了什么文件就重新加载什么文 ...

  8. Python基础入门知识点——深浅拷贝

    深浅拷贝 对象引用.浅拷贝.深拷贝(拓展.难点.重点) Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果 其实这个是由于共享内存导致的结果 拷贝 ...

  9. Jmeter 常用函数(9)- 详解 __UUID

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 返回 伪随机类型4 通用唯一标识符 语 ...

  10. JavaScript学习系列博客_28_JavaScript 数组去重

    数组去重 var arr = [1,2,3,2,2,1,3,4,2,5]; //去除数组中重复的数字 //获取数组中的每一个元素 for(var i=0 ; i<arr.length ; i++ ...