LocalDate

该类的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息。另外,它也不附带任何与时区相关的信息

public class LocalDataTest {public static void main(String[] args) {//你可以通过静态工厂方法of创建一个LocalDate实例。LocalDate实例提供了多种方法来读取常用的值,比如年份、月份、星期几等,如下所示。LocalDate date = LocalDate.of(2014, 3, 18);System.out.println("date.getYear() = " + date.getYear());System.out.println("date.getMonth() = " + date.getMonth());System.out.println("date.getDayOfMonth() = " + date.getDayOfMonth());System.out.println("date.getDayOfWeek() = " + date.getDayOfWeek());System.out.println("date.lengthOfMonth() = " + date.lengthOfMonth());System.out.println("date.isLeapYear() = " + date.isLeapYear());
​
​//你还可以通过传递一个TemporalField参数给get方法拿到同样的信息。// TemporalField是一个接口,它定 义了如何访问temporal对象某个字段的值。// ChronoField枚举实现了这一接口,所以你可以很方便地使用get方法得到枚举元素的值System.out.println("date.get(ChronoField.YEAR) = " + date.get(ChronoField.YEAR));System.out.println("date.get(ChronoField.MONTH_OF_YEAR) = " + date.get(ChronoField.MONTH_OF_YEAR));System.out.println("date.get(ChronoField.DAY_OF_MONTH) = " + date.get(ChronoField.DAY_OF_MONTH));
​
​//你还可以使用工厂方法从系统时钟中获取当前的日期:LocalDate today = LocalDate.now();System.out.println("today.getDayOfMonth() = " + today.getDayOfMonth());System.out.println("today.getDayOfWeek() = " + today.getDayOfWeek());System.out.println("today.getYear() = " + today.getYear());System.out.println("today.getMonth() = " + today.getMonth().getValue());}
​
}

打印信息如下:

date.getYear() = 2014
date.getMonth() = MARCH
date.getDayOfMonth() = 18
date.getDayOfWeek() = TUESDAY
date.lengthOfMonth() = 31
date.isLeapYear() = false
date.get(ChronoField.YEAR) = 2014
date.get(ChronoField.MONTH_OF_YEAR) = 3
date.get(ChronoField.DAY_OF_MONTH) = 18
today.getDayOfMonth() = 20
today.getDayOfWeek() = FRIDAY
today.getYear() = 2019
today.getMonth() = 12

LocalTime

类似地,一天中的时间,比如13:45:20,可以使用LocalTime类表示。

public class LocalDataTest2 {public static void main(String[] args) {//你可以使用of重载的两个工厂方法创建LocalTime的实例。第一个重载函数接收小时和分钟,第二个重载函数同时还接收秒。// 同LocalDate一样,LocalTime类也提供了一些getter方法访问这些变量的值,如下所示。LocalTime time = LocalTime.of(13, 45, 20);System.out.println("time.getHour() = " + time.getHour());System.out.println("time.getMinute() = " + time.getMinute());System.out.println("time.getSecond() = " + time.getSecond());}
}

打印信息如下:

time.getHour() = 13
time.getMinute() = 45
time.getSecond() = 20

LocalDate和LocalTime还可以通过解析代表它们的字符串创建,使用静态方法parse,你可以实现这一目的。

public class LocalDataTest3 {public static void main(String[] args) {//你可以向parse方法传递一个DateTimeFormatter。该类的实例定义了如何格式化一个日期或者时间对象。//它是替换老版java.util.DateFormat的推荐替代品。
​//一旦传递的字符串参数无法被解析为合法的LocalDate或LocalTime对象,这两个parse方法都会抛出一个继承自RuntimeException的DateTimeParseException异常LocalDate date = LocalDate.parse("2014-03-18");System.out.println("date.getMonth() = " + date.getMonth().getValue());LocalTime time = LocalTime.parse("13:45:20");System.out.println("time.getHour() = " + time.getHour());}
}

LocalDateTime

这个复合类名叫LocalDateTime,是LocalDate和LocalTime的合体。它同时表示了日期和时间,但不带有时区信息,你可以直接创建,也可以通过合并日期和时间对象构造

public class LocalDataTest4 {public static void main(String[] args) {// 2014-03-18T13:45:20LocalDateTime dt1 = LocalDateTime.of(2014, Month.MARCH, 18, 13, 45, 20);
​//你也可以使用 或toLocalDate者toLocalTime方法,从LocalDateTime中提取LocalDate或者LocalTime 组件LocalDate date = dt1.toLocalDate();LocalTime time = dt1.toLocalTime();
​LocalDateTime dt2 = LocalDateTime.of(date, time);//注意,通过它们各自的atTime或者atDate方法,向LocalDate传递一个时间对象,或者向LocalTime传递一个日期对象的方式,你可以创建一个LocalDateTime对象LocalDateTime dt3 = date.atTime(13, 45, 20);LocalDateTime dt4 = date.atTime(time);LocalDateTime dt5 = time.atDate(date);
​}
}

我们可以用比较直观的方式操纵LocalDate的属性

public class LocalDataTest5 {public static void main(String[] args) {LocalDate date1 = LocalDate.of(2014, 3, 18);  //2014-3-18LocalDate date2 = date1.withYear(2011);     //2011-3-18LocalDate date3 = date2.withDayOfMonth(25);     //2011-3-25LocalDate date4 = date3.with(ChronoField.MONTH_OF_YEAR, 9);     //2011-9-25}
}

或者用类似plus方法去操控

public class LocalDataTest6 {public static void main(String[] args) {//plus方法也是通用方法,它和minus方法都声明于Temporal接口中。//通过这些方法,对TemporalUnit对象加上 或者减去一个数字,我们能非常方便地将Temporal对象前溯或者回滚至某个时间段,//通过 ChronoUnit 枚举我们可以非常方便地实现TemporalUnit接口LocalDate date1 = LocalDate.of(2014, 3, 18);        //2014-3-18LocalDate date2 = date1.plusWeeks(1);       //2014-3-25LocalDate date3 = date2.minusYears(3);      //2011-3-25LocalDate date4 = date3.plus(6, ChronoUnit.MONTHS); //2011-9-25}
}

DateTimeFormatter

处理日期和时间对象时,格式化以及解析日期-时间对象是另一个非常重要的功能。新的java.time.format包就是特别为这个目的而设计的。这个包中,最重要的类是DateTime-Formatter。创建格式器最简单的方法是通过它的静态工厂方法以及常量。像BASIC_ISO_DATE 8和ISO_LOCAL_DATE这 样 的 常 量 是DateTimeFormatter类 的 预 定 义 实 例 。 所 有 的 DateTimeFormatter实例都能用于以一定的格式创建代表特定日期或时间的字符串。比如,下面的这个例子中,我们使用了两个不同的格式器生成了字符串:

public class LocalDataTest7 {public static void main(String[] args) {LocalDate date = LocalDate.of(2014, 3, 18);System.out.println(date.format(DateTimeFormatter.BASIC_ISO_DATE));System.out.println(date.format(DateTimeFormatter.ISO_LOCAL_DATE));
​LocalDate date1 = LocalDate.parse("20140318",DateTimeFormatter.BASIC_ISO_DATE);LocalDate date2 = LocalDate.parse("2014-03-18",DateTimeFormatter.ISO_LOCAL_DATE);}
}

DateTimeFormatter的ofPattern方法也提供了一个重载的版本,使用它你可以创建某个Locale的格式器

public class LocalDataTest8 {public static void main(String[] args) {//DateTimeFormatter的ofPattern方法也提供了一个重载的版本,使用它你可以创建某个Locale的格式器DateTimeFormatter formatter =DateTimeFormatter.ofPattern("yyyy年MM月dd日");LocalDate date = LocalDate.of(2014, 3, 18);System.out.println(date.format(formatter));
​//下面为传统的格式化时间类SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");System.out.println(dateFormat.format(System.currentTimeMillis()));}
}

Date与这几个类的互相转换

public class DateUtil {/*** Date转LocalDateTime** @param date* @return*/public static LocalDateTime UDateToLocalDateTime(Date date) {Instant instant = date.toInstant();ZoneId zone = ZoneId.systemDefault();return LocalDateTime.ofInstant(instant, zone);}
​/*** Date转LocalDate*/public static LocalDate UDateToLocalDate(Date date) {Instant instant = date.toInstant();ZoneId zone = ZoneId.systemDefault();LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);return localDateTime.toLocalDate();}
​/*** Date转TimeToUpdate*/public static LocalTime UDateToLocalTime(Date date) {Instant instant = date.toInstant();ZoneId zone = ZoneId.systemDefault();LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);return localDateTime.toLocalTime();}
​/*** LocalDateTime转Date*/public static Date LocalDateTimeToUdate(LocalDateTime localDateTime) {ZoneId zone = ZoneId.systemDefault();Instant instant = localDateTime.atZone(zone).toInstant();return Date.from(instant);}
​/*** LocalDate转Date*/public static Date LocalDateToUdate(LocalDate localDate) {ZoneId zone = ZoneId.systemDefault();Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();return Date.from(instant);}
​/*** LocalTime转Date*/public static Date LocalTimeToUdate(LocalTime localTime, LocalDate localDate) {LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);ZoneId zone = ZoneId.systemDefault();Instant instant = localDateTime.atZone(zone).toInstant();return Date.from(instant);}
}

JDK1.8新特性之时间和日期的使用相关推荐

  1. 【小家java】java8新特性之---全新的日期、时间API(JSR 310规范),附SpringMVC、Mybatis中使用JSR310的正确姿势

    [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小家java ...

  2. java8新特性(6)— 日期与时间

    java8新特性(6)- 日期与时间 全新的日期与时间处理 package com.common.jdk8;import java.time.*;//Java 8通过发布新的Date-Time API ...

  3. JDK1.8 新特性(全)

    JDK1.8 新特性 本文主要介绍了JDK1.8版本中的一些新特性,乃作者视频观后笔记,仅供参考. jdk1.8新特性知识点: Lambda表达式 函数式接口 方法引用和构造器调用 Stream AP ...

  4. java 1.7 可变参数,JDK1.7新特性(2):异常和可变长参数处理

    异常 jdk1.7对try--catch--finally的异常处理模式进行了增强,下面我们依次来看增强的方面. 1. 为了防止异常覆盖,给Throwable类增加了addSuppressed方法,可 ...

  5. java基础知识总结:基础知识、面向对象、集合框架、多线程、jdk1.5新特性、IO流、网络编程

    目录 一.基础知识: 二.面向对象 三.集合框架 四.多线程: 五.jdk1.5的新特性 六.IO流 七.网络编程: 一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtua ...

  6. JDK1.6“新“特性Instrumentation之JavaAgent

    JDK1.6"新"特性Instrumentation之JavaAgent 文章目录 JDK1.6"新"特性Instrumentation之JavaAgent 简 ...

  7. jdk1.8新特性的应用-Stream 的终止操作

    jdk1.8新特性的应用-Stream 的终止操作 public class TestStreamApi4 {List<Employee> emps = Arrays.asList(new ...

  8. jdk1.8新特性_Lambda表达式的引入

    jdk1.8新特性_Lambda表达式的引入 引入 需求: 获取工资大于20000的员工信息 public class Employee {private String name;private in ...

  9. jdk1.5新特性5之枚举之模拟枚举类型

    一 简单应用 package cn.xy.Enum; public enum TrafficLamp {  RED,GREEN,YELLOW; } TrafficLamp red = TrafficL ...

最新文章

  1. Zend Guard 各版本下载【破解方法】
  2. 在 iOS 11 中使用 Core Bluetooth
  3. 自动开料机器人_工业4.0智能家具无人化生产线 自动化无人化大势所趋
  4. python常见数据存储 csv txt pickle
  5. Pandas直接读取arff格式的文件,这种需求还是头一次碰到!
  6. 云原生人物志 | Pulsar翟佳:社区的信任最重要
  7. 20150317--TP
  8. scanf()的用法
  9. 问题(二)--算法相关
  10. 形式语义学-JLU-ZHH
  11. SAP系统如何打NOTE?
  12. python获取本机ip地址_python3 获取本机ip地址
  13. 基于单片机的功放protues_基于单片机的音乐播放器设计
  14. 【ZYNQ】从入门到秃头01 初识ZYNQ(PS和PL之间连接)
  15. pytorch求解高维空间PDE
  16. 计算机应用基础7次作业答案,北京中医药大学远程教育“计算机应用基础”第7次作业(14页)-原创力文档...
  17. C++ pair 和make_pair
  18. python第三方插件登录网易音乐_项目实战 | Python开发网易云音乐插件
  19. UiPath中国市场rpa占有率
  20. 隐私保护学习笔记(privacy protection reading list)

热门文章

  1. TF-A代码阅读: SP_EL3栈内存-cpu_data内存的介绍(cpu_context介绍)
  2. [思考]-ARM LR寄存器的思考
  3. linux kernel中的virt_to_phys代码解读
  4. 文件权限与目录配置——笔记
  5. (20)PDE_PTE属性(U/S PS A D 有效位)
  6. 注入(二):修改导入表(c++)
  7. 1.4 Java创建一个学生类
  8. Python实现学生信息管理(面向对象)
  9. 1095 Cars on Campus (30 分)【难 / 模拟 未完成】
  10. 2.4.3 死锁的处理策略-避免死锁