1. 日期和时间概述

  1. LocalDate,LocalTime,LocalDateTime类的实例是不可变的对象,分别表示使用 ISO-8601 日历系统

    的日期,时间,日期和时间;它们提供了简单的日期和时间,并不包含当前的时间信息;也不包含与时区相关的信息;
  2. Instant: 时间戳(指定时间与 1970年1月1日 00:00:00 之间的毫秒值);
  3. Duration: 计算两个"时间"之间的间隔;
  4. Period: 计算两个"日期"之间的间隔;
// 测试类
public class TestLocalDateTime{ // 1. LocalDate, LocalTime, LocalDateTime
@Test
public void test(){
// 获取当前时间
LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt); // 将当前时间中的日变成 10 日
LocalDateTime ldt5 = ldt.withDayOfMonth(10);
System.out.println(ldt5); // 获取指定时间, 例如,指定 2017年10月2日,12时13分24秒
LocalDateTime ldt2 = LocalDateTime.of(2017,10,2,12,13,24);
System.out.println(ldt2); // 时间的加减,都会产生一个新的实例
// 在当前时间的基础上,加两年
LocalDateTime ldt3 = ldt.plusYears(2); // 加两年
System.out.println(ldt3); LocalDateTime ldt4 = ldt.minusMonths(2);
System.out.println(ldt4); // 获取年(或月)
System.out.println(ldt.getYear());
System.out.println(ldt.getMonth()); // 返回 Month 对象
System.out.println(ldt.getMonthValue()); // 返回 int 类型 } // 2. Instant
@Test
public void test2(){
Instant ins = Instant.now(); // 默认获取 UTC 时区
System.out.println(ins); // 转换为中国时区,即带偏移量运算
OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));
System.out.println(odt); // 将ins转换成毫秒
System.out.println(ins.toEpochMilli()); // 将指定的毫秒转换为时间
Instant ins2 = Instant.ofEpochSecond(60);
System.out.println(ins2);
} // 3. Duration / Period
@Test
public void test3(){
// 计算两个时间的间隔 Duration
Instant ins = Instant.now(); try{
Thread.sleep(1000);
}catch(InterruptedException e){ } Instant ins2 = Instant.now(); Duration duration = Duration.between(ins,ins2);
System.out.println(duration.toMillis()); // 获取毫秒值
System.out.println(duration.getSeconds()); // 获取秒 // 计算两个日期的间隔 Period
LocalDate ld = LocalDate.of(2017,10,1);
LocalDate ld2 = LocalDate.now(); Period period = Period.between(ld, ld2);
System.out.println(period);
System.out.println(period.getYears());
}
}

2. 日期的操纵

  • TemporalAdjuster 接口: 时间校正器;例如,将日期调整到"下个周日"的操作;
  • TemporalAdjusters: 该类通过静态方法,提供了大量的常用TemporalAdjuster的实现;
// 测试类
public class TestDate{ // TemporalAdjuster
@Test
public void test(){
LocalDate ldt = LocalDate.now(); // 获取下个周日
LocalDate nextSunday = ldt.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));
}
}

3. 日期格式化

// 测试类
public class TestDate{ // DateTimeFormatter: 格式化时间或日期
@Test
public void test(){
DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
LocalDateTime ldt = LocalDateTime.now(); String str = ldt.format(dtf);
System.out.println(str); // 自定义格式
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String str2 = dtf2.format(ldt);
System.out.println(str2); // 将字符串转换成日期
LocalDateTime newDate = ldt.parse(str2,dtf2);
Sytem.out.println(newDate);
}
}

4. 时区的处理

  • 带时区的时间分别为:ZonedDate,ZonedTime,ZonedDateTime; 其中,每个时区都对应着ID; 地区ID都为

    "{区域}/{城市}"的格式,例如,"Asia/Shanghai";
  • ZoneId: 该类中包含了所有的时区信息;
    • getAvailableZoneIds(): 可以获取java8支持的所有时区;
    • of(id): 用指定的时区信息获取 ZoneId 对象;
//测试类
public class TestZone{
@Test
public void test(){ // 查看 java8 支持的所有时区
Set<String> set = ZoneId.getAvailableZoneIds();
set.forEach(System.out::println); // 获取指定时区的当前时间
LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Europe/London"));
System.out.println(ldt); // 带时区的时间
ZonedDateTime zdt = ldt.atZone(ZoneId.of("Europe/London"));
System.out.println(zdt);
}
}

5. 可重复注解与类型注解

  • Java8 对注解处理提供了两点改进: 可重复注解及可用于类型的注解;
  • Java8 新增加两个注解的程序元素类型 ElementType.TYPE_USEElementType.TYPE_PARAMETER;
// 自定义注解类
@Repeatable(MyAnnotations.class)
@Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
String value() default "annotationtest";
} // 注解容器类
@Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotations{
MyAnnotation[] value();
} // 测试类
public class TestAnnotation{ @Test
public void test(){
Class<TestAnnotation> clazz = TestAnnotation.class;
Method m1 = clazz.getMethod("show"); // 获取 show 方法上的注解
MyAnnotation[] mas = m1.getAnnotationsByType(MyAnnotation.class); for(MyAnnotation myAnnotation : mas){
System.out.println(myAnnotation.value());
}
} @MyAnnotation("hello")
@MyAnnotation("world")
public void show(){ }
}

参考资料

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

  1. 为什么不建议使用Date,而是使用Java8新的时间和日期API?

    Java 8:新的时间和日期API 在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法.Java ...

  2. 【JAVA8新的时间与日期 API】- 传统时间格式化的线程安全问题

    Java8之前的日期和时间API,存在一些问题,最重要的就是线程安全的问题.这些问题都在Java8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大. 传统时间格式化的线程安 ...

  3. java8中的时间处理

    java8中关于时间的处理整理 package com.xb.utils; import java.time.*; import java.time.format.DateTimeFormatter; ...

  4. 【转】Java 8新特性(四):新的时间和日期API

    Java 8另一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期. 在介绍本篇文章内容之前,我们先来讨论Ja ...

  5. Java 8新特性(四):新的时间和日期API

    Java 8另一个新增的重要特性就是引入了新的时间和日期API,它们被包含在java.time包中.借助新的时间和日期API可以以更简洁的方法处理时间和日期. 在介绍本篇文章内容之前,我们先来讨论Ja ...

  6. Linux 设置系统时间和日期 API

    嵌入式Linux 设置时间和日期 API ,它是busybox要提取的源代码. Linux设置时间和日期的步骤: 1. 设置系统时间和日期: 2. 该系统的时间和日期,同步到硬件. #include ...

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

    本地时间和时间戳 主要方法: now:静态方法,根据当前时间创建对象 of:静态方法,根据指定日期/时间创建对象 plusDays,plusWeeks,plusMonths,plusYears:向当前 ...

  8. java8 中的时间和数据的变化

    java8除了lambda表达式之外还对时间和数组这两块常用API做想应调整, Stream 有几个常用函数: store 排序 (a,b)-> a.compareTo(b)  排出来的结果是正 ...

  9. [转]JavaSE 8—新的时间和日期API

    为什么我们需要一个新的时间日期API Java开发中一直存在一个问题,JDK提供的时间日期API一直对开发者没有提供良好的支持. 比如,已有的的类(如java.util.Date和SimpleDate ...

随机推荐

  1. 【转】shell pipe与输入输出重定向的区别

    http://www.cnblogs.com/chengmo/archive/2010/10/21/1856577.html

  2. dp之完全背包poj2063

    题意:求投资k年获得最大投资,每年都选最大利息的方案进行投资k年后就可以得到最多的人民币. 注意:每一年收到的利息都可以作为下一年的本金......其实从测试数据来看,是很好看出来的...... 思路 ...

  3. 一款基于jquery的喜欢动画按钮

    今天给大家带来一款基于jquery的喜欢动画按钮.这个实例中给了三种动画特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <p class='heading'> C ...

  4. WebService或HTTP服务端接收请求转发消息到另一个服务端-实现思路

    1.需求结构(WebService) A客户端<->B服务端<->C服务端 说明: a.在B服务端上面添加配置项(1.是否转发消息到C服务端:2.C服务端IP和端口): b.A ...

  5. mysql client中使用帮助命令

    当前MySQL服务器的版本号 使用那个命令来参看MySQL的帮助信息 帮助主题供我们查看. 命令为: ? contents 例如查看max方法的使用方法则输入? max即可 这个在navcat中是不支 ...

  6. Unix系统编程()复制文件描述符

    Bourne shell的IO重定向语法2>&1,意在通知shell把标准错误(文件描述符2)重定向到标准输出(文件描述符1).因此下列命令将把标准输出和标准错误写入result.log ...

  7. linux 链接的使用 创建和删除符号连接(软、硬链接)

    1 . 使用方式 :ln [option] source_file dist_file   (source_file是待建立链接文件的文件,dist_file是新创建的链接文件)            ...

  8. 一条经典SQL语句优化实例

    1.概述 如下SQL语句发生严重消耗资源的问题,使得OS's load average会在30以上,一条语句需要执行上百秒. /*PIXPatient 184176条DomainPatient 184 ...

  9. Android Studio多渠道打包的使用

    项目地址 https://github.com/mcxiaoke/gradle-packer-plugin 项目介绍 gradle-packer-plugin 是Android多渠道打包工具Gradl ...

  10. phpstrom xdebug wamp调试配置文档

    下载并安装phpstorm,下载地址如下 http://download-cf.jetbrains.com/webide/PhpStorm-9.0.2.exe 安装完成后,完成注册,注册方法如下   ...