java1.8的几大新特性(二)

七、Date API

Java 8 在包java.time下包含了一组全新的时间日期API。新的日期API和开源的Joda-Time库差不多,但又不完全一样,下面的例子展示了这组新API里最重要的一些部分:

  1 public class Test {
  2     public static void main(String[] args) {
  3         /**
  4          *(一) Clock 时钟
  5          * Clock类提供了访问当前日期和时间的方法,Clock是时区敏感的,可以用来取代 System.currentTimeMillis() 来获取当前的微秒数。
  6          * 某一个特定的时间点也可以使用Instant类来表示,Instant类也可以用来创建老的java.util.Date对象。
  7          */
  8         Clock clock = Clock.systemDefaultZone();
  9         long millis = clock.millis();
 10         System.out.println(millis+":"+System.currentTimeMillis());
 11         Instant instant = clock.instant();
 12         Date legacyDate = Date.from(instant);   // legacy java.util.Date
 13         System.out.println(legacyDate);
 14
 15         /**
 16          *(二)Timezones 时区
 17          * 在新API中时区使用ZoneId来表示。时区可以很方便的使用静态方法of来获取到。
 18          * 时区定义了到UTS时间的时间差,在Instant时间点对象到本地日期对象之间转换的时候是极其重要的。
 19          */
 20         System.out.println(ZoneId.getAvailableZoneIds());//输出所有的时区
 21         ZoneId zone1 = ZoneId.of("Europe/Berlin");
 22         ZoneId zone2 = ZoneId.of("Brazil/East");
 23         System.out.println(zone1.getRules());//输出ZoneRules[currentStandardOffset=+01:00]
 24         System.out.println(zone2.getRules());//输出ZoneRules[currentStandardOffset=-03:00]
 25
 26         /**
 27          *(三)LocalTime 本地时间
 28          * LocalTime 定义了一个没有时区信息的时间,例如 晚上10点,或者 17:30:15。
 29          * 下面的例子使用前面代码创建的时区创建了两个本地时间。之后比较时间并以小时和分钟为单位计算两个时间的时间差:
 30          */
 31         LocalTime now1 = LocalTime.now(zone1);
 32         LocalTime now2 = LocalTime.now(zone2);
 33         System.out.println(now1.isBefore(now2));  // false
 34         long hoursBetween = ChronoUnit.HOURS.between(now1, now2);
 35         long minutesBetween = ChronoUnit.MINUTES.between(now1, now2);
 36         System.out.println(hoursBetween);       // -2
 37         System.out.println(minutesBetween);     // -179
 38
 39         /**LocalTime 提供了多种工厂方法来简化对象的创建,包括解析时间字符串。
 40          *
 41          */
 42         LocalTime late = LocalTime.of(23, 59, 59);
 43         System.out.println(late);       // 23:59:59
 44         DateTimeFormatter germanFormatter =
 45                 DateTimeFormatter
 46                         .ofLocalizedTime(FormatStyle.SHORT)
 47                         .withLocale(Locale.GERMAN);
 48         LocalTime leetTime = LocalTime.parse("13:37", germanFormatter);
 49         System.out.println(leetTime);   // 13:37
 50
 51         /**
 52          * (四)LocalDate 本地日期
 53          * LocalDate 表示了一个确切的日期,比如 2014-03-11。该对象值是不可变的,用起来和LocalTime基本一致。
 54          * 下面的例子展示了如何给Date对象加减天/月/年。另外要注意的是这些对象是不可变的,操作返回的总是一个新实例。
 55          */
 56         LocalDate today = LocalDate.now();
 57         LocalDate tomorrow = today.plus(1, ChronoUnit.DAYS);
 58         LocalDate yesterday = tomorrow.minusDays(2);
 59         System.out.println(yesterday);
 60         LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);
 61         DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
 62         System.out.println(dayOfWeek);    // FRIDAY
 63
 64         DateTimeFormatter germanFormatter1 =
 65                 DateTimeFormatter
 66                         .ofLocalizedDate(FormatStyle.MEDIUM)
 67                         .withLocale(Locale.GERMAN);
 68         LocalDate xmas = LocalDate.parse("24.12.2014", germanFormatter1);
 69         System.out.println(xmas);   // 2014-12-24
 70         //用这种方式比以前使用日期的要方便多了
 71
 72         /**
 73          * (五)LocalDateTime 本地日期时间
 74          * LocalDateTime 同时表示了时间和日期,相当于前两节内容合并到一个对象上了。
 75          * LocalDateTime和LocalTime还有LocalDate一样,都是不可变的。LocalDateTime提供了一些能访问具体字段的方法。
 76          */
 77         LocalDateTime sylvester = LocalDateTime.of(2014, Month.DECEMBER, 31, 23, 59, 59);
 78         DayOfWeek dayOfWeek1 = sylvester.getDayOfWeek();
 79         System.out.println(dayOfWeek1);      // WEDNESDAY
 80         Month month = sylvester.getMonth();
 81         System.out.println(month);          // DECEMBER
 82         long minuteOfDay = sylvester.getLong(ChronoField.MINUTE_OF_DAY);
 83         System.out.println(minuteOfDay);    // 1439
 84         /**
 85          * 只要附加上时区信息,就可以将其转换为一个时间点Instant对象,Instant时间点对象可以很容易的转换为老式的java.util.Date。
 86          */
 87         Instant instant1 = sylvester
 88                 .atZone(ZoneId.systemDefault())
 89                 .toInstant();
 90         Date legacyDate1 = Date.from(instant1);
 91         System.out.println(legacyDate1);     // Wed Dec 31 23:59:59 CET 2014
 92
 93         /**
 94          * 格式化LocalDateTime和格式化时间和日期一样的,除了使用预定义好的格式外,我们也可以自己定义格式:
 95          */
 96         DateTimeFormatter formatter =
 97                 DateTimeFormatter
 98                         .ofPattern("MMM dd, yyyy - HH:mm");
 99         LocalDateTime parsed = LocalDateTime.parse("Nov 03, 2014 - 07:13", formatter);
100         String string = formatter.format(parsed);
101         System.out.println(string);     // Nov 03, 2014 - 07:13
102
103         //和java.text.NumberFormat不一样的是新版的DateTimeFormatter是不可变的,所以它是线程安全的。
104         //关于时间日期格式的详细信息:http://download.java.net/jdk8/docs/api/java/time/format/DateTimeFormatter.html
105         //java jdk1.8新提供的这个time在某些时候还是有好处的
106
107
108     }
109
110
111
112 }

没事用一下新api什么的,也不错,多学习,多思考

时间: 2024-09-30 06:06:01

java1.8的几大新特性(二)的相关文章

java1.8的几大新特性

一.接口的默认方法,也就是接口中可以有实现方法 1 public class Test { 2 public static void main(String[] args) { 3 Formula a=new For(); 4 a.calculate(1); 5 System.out.println(a.sqrt(8)); 6 7 8 } 9 interface Formula { 10 double calculate(int a); 11 default double sqrt(int a)

JDK1.8新特性(二): Lambda表达式 (参数列表) -> { } 和函数式接口@FunctionalInterface

Lambda表达式 二:简介 JDK的升级的目的有以下几个:增加新的功能.修复bug.性能优化.简化代码等几个方面,Lambda表达式就是属于简化代码,用于简化匿名实现类,提供一种更加简洁的写法.Lambda表达式在Swift语言中称之为代码块,Lambda表达式可以认为是一种特殊的接口,该接口必须只有一个抽象方法. 语法 (参数类型 参数名, 数参数类型 参数名2...) -> { // code }; 小括号()中的内容就是方法中的参数列表包括参数类型.参数名,其中参数类型是可以省略的,当参

Spark整合kafka0.10.0新特性(二)

接着Spark整合kafka0.10.0新特性(一)开始 import org.apache.kafka.clients.consumer.ConsumerRecord import org.apache.kafka.common.serialization.StringDeserializer import org.apache.spark.streaming.kafka010._ import org.apache.spark.streaming.kafka010.LocationStrat

类的加载、时机、反射、模板设计、jdk7/jdk8新特性(二十六)

1.类的加载概述和加载时机 * A:类的加载概述 * 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. * 加载 * 就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. * 连接 * 验证 是否有正确的内部结构,并和其他类协调一致 * 准备 负责为类的静态成员分配内存,并设置默认初始化值 * 解析 将类的二进制数据中的符号引用替换为直接引用 * 初始化 就是我们以前讲过的初始化

JAVA 8 主要新特性 ----------------(二)JDK1.8优点概括

一.JDK1.8优点概括 1.速度更快 由于底层结构和JVM的改变,使得JDK1.8的速度提高. 2.代码更少(增加了新的语法 Lambda 表达式)          增加新特性Lambda表达式的内部类改造,使得代码在书写上变得更加简洁 3.强大的 Stream API 增加了核心功能,使得代码调用方式变得更加简洁 4.便于并行 5.最大化减少空指针异常 Optional 原文地址:https://www.cnblogs.com/liuyangfirst/p/10057578.html

010-jdk1.8版本新特性二-Optional类,Stream流

1.5.Optional类 1.定义 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. Optional 是个容器:它可以保存类型T的值,或者仅仅保存null.Optional提供很多有用的方法,这样我们就不用显式进行空值检测. Optional 类的引入很好的解决空指针异常. 2.声明 以下是一个 java.util.Optional<T> 类的声明: public final class Option

C# 6.0 新特性 (二)

自动属性初始化表达式 有过正确实现结构经验的所有 .NET 开发人员无疑都为一个问题所困扰:需要使用多少语法才能使类型固定不变(为 .NET 标准建议的类型).此问题实际上是只读属性存在的问题: 定义为只读的支持字段 构造函数内支持字段的初始化 属性的显式实现(而非使用自动属性) 返回支持字段的显式 getter 实现 所有这一切仅仅是为了“正确地”实现固定不变的属性.之后,此情况还会针对类型的所有属性重复发生.因此,正确操作需要比不堪一击的方法付出明显更多的努力.发布了自动属性初始化表达式(C

Atitit hibernate3 hinernate4 hibernate5新特性attilax总结

1.1. Hibernate3的新特性 1 1.2. hibernate4.1版本中的新特性和hibernate3.3部分区别 - WTOM的博客 - 博客频道 - CSDN.NET.html1 1.3. Hibernate 5.1.0 正式版发布,新版本带来了一些新特性及功能增强 2016022 1.4. 参考资料2 1.1. Hibernate3的新特性 二.  相对于Hibernate2,Hibernate3版本的变化包括三个方面: (1)API的变化 三.     (2)元数据 元数据主

开发者必看|Android 8.0 新特性及开发指南

背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Android 新系统开发者预览版时已给新系统取名为 Android O.自2008 年发布以来, Android 依靠 Google 的生态运作,全球市场份额在2016年底已超过85% .而近几年依靠 Android 发展起来的智能手机厂商不断增加, Android 生态大家庭也正在不断壮大. Androi