目
录
LocalDate、 LocalTime、 LocalDateTime类
DateTimeFormatter解析和格式化日期或时间的类
一.JDK1.7版本的新特性
1.二进制字面量
JDK7开始,可以 用二进制来表示整数 (byte,short,int和long)。使用二进制字面量的好处是可以使代码更容易被理解。语法非常简单,只要在二进制数值前面加 0b或者0B, 例: int x = 0b110110.
2.数字字面量可以出现下划线
为了增强对数值的阅读性,如我们经常把数据用逗号分隔一样。JDK7提供了 _对数据分隔 。注意事项:不能出现在进制标识和数值之间 / 不能出现在数值开头和结尾 / 不能出现在小数点旁边. 例:int x = 100_1000;
3.switch 语句可以用字符串
public class Test {
public static void main(String[] args) {
String s="HELLO";
switch (s){
case "a":
System.out.println("a");
break;
case "HELLO":
System.out.println("HELLO");
break;
}
}
}
还有一个泛型简化的特性
二.JDK1.8版本的新特性
1.新特性一:新增的日期时间相关类
LocalDate、 LocalTime、 LocalDateTime类![](https://i-blog.csdnimg.cn/blog_migrate/ba7b7164115121a9f18215f3a087c6d5.gif)
LocalDate、 LocalTime、 LocalDateTime类的实例是不可变的对象, 分别表示使用 ISO-8601日历系统的 日期、时间、日期和时间。 它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。 注: ISO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法 这些新增的日期时间API都在 java.time包下
获取对象的方法
- 方式1通过静态方法 now(); 例如:LocalDateTime ldt = LocalDateTime.now();
- 方式2通过静态方法of()方法参数可以指定年月日时分秒; 例如:LocalDateTime of =LocalDateTime.of(2018, 12, 30, 20, 20, 20);
常用方法
- ldt.getYear(); //获取年
- ldt.getMinute(); //获取分钟
- ldt.getHour(); //获取小时
- getDayOfMonth //获得月份天数(1-31)
- getDayOfYear //获得年份天数(1-366)
- getDayOfWeek //获得星期几(返回一个 DayOfWeek枚举值)
- getMonth //获得月份, 返回一个 Month 枚举值
- getMonthValue //获得月份(1-12)
- getYear //获得年份
- format() //格式化日期日期字符串的方法 例如:String yyyy = ldt.format(DateTimeFormatter.ofPattern("yyyy"));
- toLocalDate(); / toLocalTime(); //转换的方法 例如:LocalDate localDate = ldt.toLocalDate(); 例如:LocalTime localTime = ldt.toLocalTime();
- isAfter() //判断一个日期是否在指定日期之后 例如: boolean after = ldt.isAfter(LocalDateTime.of(2024, 1, 1, 2, 3));
- isBefore() //判断一个日期是否在指定日期之前
- isEqual() //判断两个日期是否相同
- isLeapYear() //判断是否是闰年注意是LocalDate类中的方法 例如 boolean b= LocalDate.now().isLeapYear();
- parse("2007-12-03T10:15:30"); //将一个日期字符串解析成日期对象,注意字符串日期的写法的格式要正确,否则解析失败. 注意细节:如果用LocalDateTime 想按照我们的自定义的格式去解析,注意日期字符串的 年月日时分秒要写全,不然就会报错 例如:LocalDateTime parse = LocalDateTime.parse("2007-12-03T10:15:30");
- plusYears(); / plusMonths(); / ....... //添加年月日时分秒的方法 plus系列的方法 都会返回一个新的LocalDateTime的对象 例如:LocalDateTime localDateTime = ldt.plusYears(1);
- minusYears(); / minusMonths(); / ....... //减去年月日时分秒的方法 minus 系列的方法 注意都会返回一个新的LocalDateTime的对象 例如:LocalDateTime localDateTime2 = ldt.minusYears(8);
- withYears(); / withMonths(); / ....... //指定年月日时分秒的方法 with系列的方法 注意都会返回一个新的LocalDateTime的对象 例如 LocalDateTime localDateTime3 = ldt.withYear(1998);
Instant 时间戳类![](https://i-blog.csdnimg.cn/blog_migrate/ba7b7164115121a9f18215f3a087c6d5.gif)
- Instant ins = Instant.now(); //获取对象的方法 now(), 注意默认获取出来的是当前的美国时间和我们的北京时间相差八个小时
- atOffset() //设置偏移量 例如:OffsetDateTime time = ins.atOffset(ZoneOffset.ofHours(8));
- ZoneId.systemDefault() //获取本地的默认时区ID
- atZone() //获取系统默认时区时间的方法,其参数是要一个时区的编号, 可以通过时区编号类获取出来 例如: ZonedDateTime zonedDateTime = ins.atZone(ZoneId.systemDefault());
- getEpochSecond() //获取从1970-01-01 00:00:00到当前时间的秒值 例如:long epochSecond = ins.getEpochSecond();//获取从1970-01-01 00:00:00到当前时间的秒值
- toEpochMilli() //获取从1970-01-01 00:00:00到当前时间的毫秒值
- getNano() //方法是把获取到的当前时间的秒数 换算成纳秒 例如:当前时间是2018-01-01 14:00:20:30 , 那就把30豪秒换算成纳秒 int nano = ins.getNano()
- ofEpochSecond() //给计算机元年增加秒数 例如:Instant instant = Instant.ofEpochSecond(5);
- ofEpochMilli() //给计算机元年增加毫秒数 补充:单位换算 0.1 毫秒 = 10 的5次方纳秒 = 100000 纳秒 1 毫秒 = 1000 微妙 = 1000000 纳秒
Duration类和Period类![](https://i-blog.csdnimg.cn/blog_migrate/ba7b7164115121a9f18215f3a087c6d5.gif)
Duration 是用于 计算两个“时间”间隔 的类, 而 Period 是用于 计算两个“日期”间隔 的类 .
Duration类常用的方法如下:
- between() //计算两个时间的间隔,默认是秒 例如:Duration between = Duration.between(start, end);
- toMillis() //将秒转成毫秒
Period类计算两个日期之间的间隔的代码如下:
LocalDate s = LocalDate.of(1985, 03, 05);
LocalDate now = LocalDate.now();
Period be = Period.between(s, now);
System.out.println(be.getYears());间隔了多少年
System.out.println(be.getMonths());间隔了多少月
System.out.println(be.getDays());间隔多少天
TemporalAdjuster时间矫正器![](https://i-blog.csdnimg.cn/blog_migrate/ba7b7164115121a9f18215f3a087c6d5.gif)