• LocalDate LocalTime Instant duration以及Period
  • 使用LocalDate和LocalTime
//2017-03-20
LocalDate date = LocalDate.of(2017, 3, 20);
int year = date.getYear();//2017 返回年份
Month month = date.getMonth();//MARCH 返回月份 3月
int dayOfMonth = date.getDayOfMonth();//20 返回月中的第几天
DayOfWeek dayOfWeek = date.getDayOfWeek();//MONDAY 返回星期几
int len = date.lengthOfMonth();//31 返回这个月有多少天
boolean leapYear = date.isLeapYear(); //false 是否是闰年 //获取系统时间
LocalDate now = LocalDate.now(); //相当于 new Date() //14:33:45
LocalTime time = LocalTime.of(14, 33, 45);
int hour = time.getHour();//时
int minute = time.getMinute();//分
int second = time.getSecond();//秒 //还可以通过解析代表他们的字符串创建.
LocalDate date = LocalDate.parse("2017-03-20");
LocalDate dateTime = LocalDate.parse("14:33:20");
  • 合并日期和时间
LocalDate date = LocalDate.of(2017, 3, 20);
LocalTime time = LocalTime.of(14, 33, 45);
LocalDateTime dateTime = LocalDateTime.of(2017, 3, 20, 14, 41, 40);
LocalDateTime dateTime1 = LocalDateTime.of(date, time);
LocalDateTime dateTime2 = date.atTime(14, 33, 45);
LocalDateTime dateTime3 = date.atTime(time);
LocalDateTime dateTime4 = time.atDate(date);
//从LocalDateTime装换为LocalDate和LocalTime
LocalDate localDate = dateTime.toLocalDate();
LocalTime localTime = dateTime.toLocalTime();
  • 机器的日期和时间格式
  • 操纵,解析和格式化日期
//以直观的方式操作LocalDate属性
LocalDate date = LocalDate.of(2017, 3, 20);//2017-3-20
LocalDate localDate = date.withYear(2011);//2011-3-20
LocalDate localDate1 = localDate.withDayOfMonth(25);//2011-3-25
LocalDate with = localDate1.with(ChronoField.MONTH_OF_YEAR, 9);//2011-9-25 //以相对的方式操作LocalDate属性 LocalDate localDate2 = date.plusWeeks(1);//一周后 2017-03-27
LocalDate localDate3 = localDate2.minusYears(3);//3年前 2014-03-27
LocalDate plus = localDate3.plus(6, ChronoUnit.MONTHS);//6个月后 2014-09-27 下面介绍LocalDate LocalTime LocalDateTime Instant的通用方法:
//Temporal是接口 所有的日期时间类 实现了该接口
//from 依据传入的Temporal对象创建对象实例
//now 依据系统时钟创建Temporal对象
//of 有Temporal对象的某个部分创建该对象的实例
//parse 由字符串创建Temporal对象的实例
//atOffset 将Temporal对象和某个时区偏移相结合
//atZone 将Temporal对象和某个时区相结合
//format 使用某个指定的格式器将Temporal对象转换为字符串(Instant类不提供该方法)
//get 读取Temporal对象的某一部分
//minus 创建Temporal对象的一个副本,通过将当前Temporal对象的值减去一定的时长创建该副本
//plus 创建Temporal对象的一个副本,通过将当前Temporal对象的值加上一定的时长创建该副本
//with 以该Temporal对象为模板,对某些状态进行修改创建该对象的副本
  • 使用TemporalAdjuster
import java.time.LocalDate;
import static java.time.temporal.TemporalAdjusters.*; /**
* @author Darcy
* Created by Administrator on 2017/3/20.
*/
public class TestTemporalAdjuster {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2017, 3, 20);
LocalDate date1 = date.with(nextOrSame(DayOfWeek.SUNDAY));//下一个周日 2017-03-26
LocalDate date3 = date1.with(lastDayOfMonth());//当月最后一天 2017-03-31
System.out.println(date3);
} } 下面是工厂方法介绍:
//dayOfWeekInMonth 创建一个新的日期,它的值为同一个月中每一周的第几天,
//firstDayOfMonth 创建一个新的日期,它的值为当月的第一天
//firstDayOfNextMonth 创建一个新的日期,它的值为下个月的第一天
//firstDayOfNextYear 创建一个新的日期,它的值为明年的第一天
//firstDayOfYear 创建一个新的日期,它的值为当年的第一天
//firstInMonth 创建一个新的日期 它的值同一个月中,第一个符合星期几要求的值
//lastDayOfMonth 创建一个新的日期,它的值为当月的最后一天
//lastDayOfNextMonth 创建一个新的日期,它的值为下个月的最后一天
//lastDayOfNextYear 创建一个新的日期,它的值为明年的最后一天
//lastDayOfYear 创建一个新的日期,它的值为当年的最后一天
//lastInMonth 创建一个新的日期 它的值同一个月中,最后一个符合星期几要求的值
//next/previous 创建一个新的日期 并将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期
//nextOrSame/previousOrSame 创建一个新的日期 并将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期 如果该日期符合要求,直接返回改对象 定制TemporalAdjuster实现自定义的日期操作
/**
* 定制TemporalAdjuster 能计算明天的日期,同时过滤掉周六和周日
*
* @author Darcy
* Created by Administrator on 2017/3/20.
*/
public class NextWorkingDay implements TemporalAdjuster { @Override
public Temporal adjustInto(Temporal temporal) {
//读取当天日期
DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
int dayToAdd = 1;//正常情况下增加一天
if (dow == DayOfWeek.FRIDAY) dayToAdd = 3;
if (dow == DayOfWeek.SATURDAY) dayToAdd = 2;
return temporal.plus(dayToAdd, ChronoUnit.DAYS);
} } 使用方式:
LocalDate date = LocalDate.of(2017, 3, 20);
LocalDate with = date.with(new NextWorkingDay()); 还有2中实现方式:
//或者用lambda表达式 但是这种不利于复用
LocalDate with1 = date.with(temporal -> {
DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
int dayToAdd = 1;//正常情况下增加一天
if (dow == DayOfWeek.FRIDAY) dayToAdd = 3;
if (dow == DayOfWeek.SATURDAY) dayToAdd = 2;
return temporal.plus(dayToAdd, ChronoUnit.DAYS);
});
//便于复用
TemporalAdjuster nextWorkingDay = TemporalAdjusters.ofDateAdjuster(temporal -> {
//读取当天日期
DayOfWeek dow = DayOfWeek.of(temporal.get(ChronoField.DAY_OF_WEEK));
int dayToAdd = 1;//正常情况下增加一天
if (dow == DayOfWeek.FRIDAY) dayToAdd = 3;
if (dow == DayOfWeek.SATURDAY) dayToAdd = 2;
return temporal.plus(dayToAdd, ChronoUnit.DAYS);
}); date.with(nextWorkingDay);
  • 打印输出及解析日期-时间对象
LocalDate date = LocalDate.of(2017, 3, 20);
String format = date.format(DateTimeFormatter.BASIC_ISO_DATE);//
String format2 = date.format(DateTimeFormatter.ISO_LOCAL_DATE);//2017-03-20 LocalDate.parse("20170320", DateTimeFormatter.BASIC_ISO_DATE);
LocalDate.parse("2017-03-20", DateTimeFormatter.ISO_LOCAL_DATE); //按照某种格式创建DateTimeFormatter
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String format1 = date.format(dateTimeFormatter);
LocalDate parse = LocalDate.parse(format1, dateTimeFormatter); //如果需要更加细粒度的控制,DateTimeFormatterBuilder类提供了更复杂的格式器,可以使用 一步一步的构造自己的格式器
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendText(ChronoField.DAY_OF_MONTH)
.appendLiteral(". ")
.appendText(ChronoField.MONTH_OF_YEAR)
.appendLiteral(" ")
.appendText(ChronoField.YEAR)
.parseCaseInsensitive()//对大小写不敏感
.toFormatter(Locale.CHINA);
LocalDate date3 = LocalDate.of(2017, 3, 20);
String format3 = date3.format(formatter); //20. 三月 2017
  • 处理不同时区的历法
//地区ID都为{区域}/{城市}的格式,这些地区集合的设定都由英特网编号分配机构(IANA)的市区数据库提供
ZoneId romeZone = ZoneId.of("Europe/Rome");
//可以通过Java8的新方法 将老的时区装换为ZoneId
ZoneId zoneId = TimeZone.getDefault().toZoneId(); LocalDate date = LocalDate.of(2017, 3, 20);
ZonedDateTime zonedDateTime = date.atStartOfDay(romeZone);
LocalDateTime dateTime = LocalDateTime.of(2017, 3, 20, 14, 41, 40);
ZonedDateTime zonedDateTime1 = dateTime.atZone(romeZone);
Instant now = Instant.now();
ZonedDateTime zonedDateTime2 = now.atZone(romeZone); //使用别的日历系统
//java8 另外提供了4中其他的日历系统 ThaiBuddhistDate MinguoDate JapaneseDate HijrahDate
ThaiBuddhistDate now1 = ThaiBuddhistDate.now();//ThaiBuddhist BE 2560-03-20
MinguoDate now2 = MinguoDate.now();//Minguo ROC 106-03-20
JapaneseDate now3 = JapaneseDate.now();//Japanese Heisei 29-03-20
HijrahDate now4 = HijrahDate.now();//Hijrah-umalqura AH 1438-06-21
JapaneseDate from = JapaneseDate.from(date); //Japanese Heisei 29-03-20
 

Java8 新的日期和时间API(笔记)的更多相关文章

  1. Java8新特性--日期和时间API

    如何正确处理时间 现实生活的世界里,时间是不断向前的,如果向前追溯时间的起点,可能是宇宙出生时,又或是是宇宙出现之前, 但肯定是我们目前无法找到的,我们不知道现在距离时间原点的精确距离.所以我们要表示 ...

  2. Java8系列 (六) 新的日期和时间API

    概述 在Java8之前, 我们一般都是使用 SimpleDateFormat 来解析和格式化日期时间, 但它是线程不安全的. @Test public void test() { SimpleDate ...

  3. 《Java 8 in Action》Chapter 12:新的日期和时间API

    在Java 1.0中,对日期和时间的支持只能依赖java.util.Date类.同时这个类还有两个很大的缺点:年份的起始选择是1900年,月份的起始从0开始. 在Java 1.1中,Date类中的很多 ...

  4. java 8中新的日期和时间API

    java 8中新的日期和时间API 使用LocalDate和LocalTime LocalDate的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息.另外,它也不附带任何与时区相关的信 ...

  5. Java 8 (11) 新的日期和时间API

    在Java 1.0中,对日期和时间的支持只能依赖java.util.Date类.这个类只能以毫秒的精度表示时间.这个类还有很多糟糕的问题,比如年份的起始选择是1900年,月份的起始从0开始.这意味着你 ...

  6. java8中的日期和时间API

    一.背景 jdk 1.8 之前, Java 时间使用java.util.Date 和 java.util.Calendar 类. Date today = new Date(); System.out ...

  7. 详解Java8的日期和时间API

    详解Java8的日期和时间API 在JDK1.0的时候,Java引入了java.util.Date来处理日期和时间:在JDK1.1的时候又引入了功能更强大的java.util.Calendar,但是C ...

  8. Java8 日期与时间 API

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

  9. Day029 JDK8中新日期和时间API (二)

    # JDK8中新日期和时间API (二) Instant介绍 Instant:时间线上的一个瞬时点. 这可能被用来记录应用程序中的事件时间 戳. 在处理时间和日期的时候,我们通常会想到年,月,日,时, ...

随机推荐

  1. C#格式化时间,货币

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...

  2. 【计算机网络】wireshark抓包分析1

    学习计算机网络很久了,但总是局限于书本知识,感觉get不到重点.经师兄建议用wireshark抓包分析看看. 我自己以前并没有做过抓包分析,所以这篇博文可能会有很多错误,只是我自己的一个记录,路过的亲 ...

  3. Spring MVC 基础篇4

    Spring MVC Controller中返回数据到页面 1.使用ModelAndView 进行数据返回到请求页面 2.利用Map类型的入参进行Controller返回到页面上 3.将数据放到Ses ...

  4. 使用Derby ij客户端工具

    Derby是开源的.嵌入式的Java数据库程序,ij是Derby提供的客户端工具,相当于其他数据库提供的sqlplus工具. ij是纯Java的程序,不用安装,使用起来就像运行普通的Java应用程序一 ...

  5. 【转载】一键安装maven脚本

    #!/bin/bashif [ -z "${MAVEN_HOME}" ]; then #得到时间 TIME_FLAG=`date +%Y%m%d_%H%M%S` #备份配置文件 c ...

  6. 山东省第六届省赛 H题:Square Number

    Description In mathematics, a square number is an integer that is the square of an integer. In other ...

  7. 浅谈单页应用和多页应用——Vue.js向

    浅谈单页应用和多页应用--Vue.js向 多页面 多页面应用:每次页面跳转,后台都会返回一个新的HTML文档,就是多页面应用. 在以往传统开发的应用(网站)大多都是多页面应用,路由由后端来写. 页面跳 ...

  8. 算法-插入排序(Insertion sorting)

    本文由@呆代待殆原创,转载请注明出处. 简介:这是一个比较算法,形象的描述插入算法就和我们玩扑克的时候我们排列手牌的方式是一样的,最开始我们手上什么都没有,然后我们每摸一张牌就把它插入到正确的位置,直 ...

  9. 【树状数组】bzoj2743 [HEOI2012]采花

    http://www.cnblogs.com/proverbs/archive/2012/10/29/2745281.html (↑)这样处理之后,每次询问时,对于每种颜色,从1到其倒数第二次出现的位 ...

  10. Java多线程——ReentrantLock源码阅读

    上一章<AQS源码阅读>讲了AQS框架,这次讲讲它的应用类(注意不是子类实现,待会细讲). ReentrantLock,顾名思义重入锁,但什么是重入,这个锁到底是怎样的,我们来看看类的注解 ...