java8新特性LocalDate、LocalTime、LocalDateTime的学习
以前操作时间都是使用SimpleDateFormat类改变Date的时间格式,使用Calendar类操作时间。但是SimpleDateFormat是线程不安全的,源码如下:
private StringBuffer format(Date date, StringBuffer toAppendTo,
FieldDelegate delegate) {
// Convert input date to time field list
calendar.setTime(date); boolean useDateFormatSymbols = useDateFormatSymbols(); for (int i = 0; i < compiledPattern.length; ) {
int tag = compiledPattern[i] >>> 8;
int count = compiledPattern[i++] & 0xff;
if (count == 255) {
count = compiledPattern[i++] << 16;
count |= compiledPattern[i++];
} switch (tag) {
case TAG_QUOTE_ASCII_CHAR:
toAppendTo.append((char)count);
break; case TAG_QUOTE_CHARS:
toAppendTo.append(compiledPattern, i, count);
i += count;
break; default:
subFormat(tag, count, delegate, toAppendTo, useDateFormatSymbols);
break;
}
}
return toAppendTo;
}
所以JAVA8推出了LocalDate、LocalTime、LocalDateTime是线程安全、简易、高可靠的时间包。源码如下
LocalDate 获取年月日
@Test
public void localDataTest(){
//创建LocalDate获取当前年月日
LocalDate now = LocalDate.now();
System.out.println("当前时间:" + now);
//构造指定的年月日
LocalDate localDate = LocalDate.of(2020, 11, 24);
System.out.println("当前指定时间:" + localDate);
int year = now.getYear();
System.out.println("当前年year:" + year);
int year1 = now.get(ChronoField.YEAR);
System.out.println("当前年year1:" + year1);
Month month = now.getMonth();
System.out.println("当前月month:" + month);
int month1 = now.get(ChronoField.MONTH_OF_YEAR);
System.out.println("当前月month1:" + month1);
int day = now.getDayOfMonth();
System.out.println("当前天day:" + day);
int day1 = now.get(ChronoField.DAY_OF_MONTH);
System.out.println("当前天day1:" + day1);
DayOfWeek dayOfWeek = now.getDayOfWeek();
System.out.println("当前星期几dayOfWeek:" + dayOfWeek);
int dayOfWeek1 = now.get(ChronoField.DAY_OF_WEEK);
System.out.println("当前星期几dayOfWeek1:" + dayOfWeek1);
}LocalTime 获取时分秒
@Test
public void localTimeTest(){
//创建LocalTime获取当前时分秒
LocalTime now = LocalTime.now();
System.out.println("当前时间:" + now);
LocalTime localTime = LocalTime.of(13, 51, 10);
System.out.println("指定时间:" + localTime);
int hour = now.getHour();
System.out.println("当前小时数hour:"+ hour);
int hour1 = now.get(ChronoField.HOUR_OF_DAY);
System.out.println("当前小时数hour1:"+ hour1);
int minute = now.getMinute();
System.out.println("当前分钟数minute:"+ minute);
int minute1 = now.get(ChronoField.MINUTE_OF_DAY);
System.out.println("当前分钟数minute1:"+ minute1);
int second = now.getSecond();
System.out.println("当前秒数second:"+ second);
int second1 = now.get(ChronoField.SECOND_OF_MINUTE);
System.out.println("当前秒数second1:"+ second1);
}LocalDateTime 获取年月日时分秒,相当于LocalDate+LocalTime,可与LocalDate、LocalTime相互转换
@Test
public void localDataTimeTest(){
//创建localDateTime获取当前年月日时分秒
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("当前时间:" + localDateTime);
LocalDateTime localDateTime1 = LocalDateTime.of(2020, Month.SEPTEMBER, 10, 14, 46, 56);
System.out.println("指定时间:" + localDateTime1);
LocalDateTime of = LocalDateTime.of(LocalDate.now(), LocalTime.now());
System.out.println("当前时间1:" + of);
LocalDateTime localDateTime2 = LocalDate.now().atTime(LocalTime.now());
System.out.println("当前时间2:" + localDateTime2);
LocalDateTime localDateTime3 = LocalTime.now().atDate(LocalDate.now());
System.out.println("当前时间3:" + localDateTime3);
LocalDate localDate = localDateTime.toLocalDate();
System.out.println("当前年月日:" + localDate);
LocalTime localTime = localDateTime.toLocalTime();
System.out.println("当前时分秒:" + localTime); }Period 时间长度类 Period表示以年、月、日衡量的时长,通过Period增加、减少年月日
@Test
public void periodTest(){
//创建localDateTime获取当前年月日时分秒
LocalDateTime localDateTime = LocalDateTime.now();
//创建Period对象,设置一年
Period period = Period.ofYears(1);
//增加一年
LocalDate localDate = localDateTime.toLocalDate().plus(period);
System.out.println("增加一年后的时间:" + localDate);
Period period1 = Period.ofYears(-1);
//减少一年
LocalDate localDate1 = localDateTime.toLocalDate().plus(period1);
System.out.println("减少一年后的时间:" + localDate1);
//创建Period对象,设置一月
Period period2 = Period.ofMonths(1);
//增加一个月
LocalDate localDate2 = localDateTime.toLocalDate().plus(period2);
System.out.println("增加一个月后的时间:" + localDate2);
//创建Period对象,设置一周
Period period3 = Period.ofWeeks(1);
//增加一周
LocalDate localDate3 = localDateTime.toLocalDate().plus(period3);
System.out.println("增加一周后的时间:" + localDate3);
//创建Period对象,设置一天
Period period4 = Period.ofDays(1);
//增加一天
LocalDate localDate4 = localDateTime.toLocalDate().plus(period4);
System.out.println("增加一天后的时间:" + localDate4);
}Duration 时间长度类 Duration表示以时、分、秒衡量的时长,通过Duration增加、减少时分秒
@Test
public void durationTest(){
//创建localDateTime获取当前时间时分秒
LocalDateTime localDateTime = LocalDateTime.now();
//创建Duration对象,设置1天
Duration duration = Duration.ofDays(1);
//增加一天
LocalTime localTime = localDateTime.toLocalTime().plus(duration);
System.out.println("增加一天后时间:" + localTime);
//创建Duration对象,设置一小时
Duration duration1 = Duration.ofHours(-1);
//减少一天
LocalTime localTime1 = localDateTime.toLocalTime().plus(duration1);
System.out.println("增加一天后时间:" + localTime1);
//创建Duration对象,设置一小时
Duration duration2 = Duration.ofHours(1);
//增加一小时
LocalTime localTime2 = localDateTime.toLocalTime().plus(duration2);
System.out.println("增加一小时后时间:" + localTime2);
//创建Duration对象,设置一分钟
Duration duration3 = Duration.ofMinutes(1);
//增加一分钟
LocalTime localTime3 = localDateTime.toLocalTime().plus(duration3);
System.out.println("增加一分钟后时间:" + localTime3);
//创建Duration对象,设置十秒钟
Duration duration4 = Duration.ofSeconds(10);
//增加十秒钟
LocalTime localTime4 = localDateTime.toLocalTime().plus(duration4);
System.out.println("增加十秒钟后时间:" + localTime4);
//创建Duration对象,设置一百毫秒
Duration duration5 = Duration.ofMillis(100);
//增加一百毫秒
LocalTime localTime5 = localDateTime.toLocalTime().plus(duration5);
System.out.println("增加一百毫秒后时间:" + localTime5);
}ZonedDateTime 时区处理类 可以设置时区
@Test
public void zonedDateTimeTest(){
ZoneId zoneId = ZoneId.of("UTC+1");
//设置指定时间、时区
ZonedDateTime zonedDateTime = ZonedDateTime.of(2020, 11, 24, 15, 29, 53, 1026, zoneId);
//获取今天是今年第几天
int dayOfYear = zonedDateTime.getDayOfYear();
System.out.println("今天是今年第"+dayOfYear+"天");
//获取今天是这月第几天
int dayOfMonth = zonedDateTime.getDayOfMonth();
System.out.println("今天是这月第"+dayOfMonth+"天");
//获取今天是这周第几天
int dayOfWeek = zonedDateTime.getDayOfWeek().get(ChronoField.DAY_OF_WEEK);
System.out.println("今天是这周第"+dayOfWeek+"天");
//增加一年
ZonedDateTime zonedDateTime1 = zonedDateTime.plusYears(1);
System.out.println("增加一年后的时间:"+zonedDateTime1);
//减少一年
ZonedDateTime zonedDateTime2 = zonedDateTime.minusYears(1);
System.out.println("减少一年后的时间:"+zonedDateTime2); }
java8新特性LocalDate、LocalTime、LocalDateTime的学习的更多相关文章
- Java8 新特性学习
摘自:https://blog.csdn.net/shuaicihai/article/details/72615495 Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda ...
- 零基础学习java------21---------动态代理,java8新特性(lambda, stream,DateApi)
1. 动态代理 在一个方法前后加内容,最简单直观的方法就是直接在代码上加内容(如数据库中的事务),但这样写不够灵活,并且代码可维护性差,所以就需要引入动态代理 1.1 静态代理实现 在讲动态代理之前, ...
- java8新特性学习:函数式接口
本文概要 什么是函数式接口? 如何定义函数式接口? 常用的函数式接口 函数式接口语法注意事项 总结 1. 什么是函数式接口? 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口 ...
- Java8 新特性学习 Lambda表达式 和 Stream 用法案例
Java8 新特性学习 Lambda表达式 和 Stream 用法案例 学习参考文章: https://www.cnblogs.com/coprince/p/8692972.html 1.使用lamb ...
- java8 新特性学习笔记
Java8新特性 学习笔记 1主要内容 Lambda 表达式 函数式接口 方法引用与构造器引用 Stream API 接口中的默认方法与静态方法 新时间日期 API 其他新特性 2 简洁 速度更快 修 ...
- 干货 | Java8 新特性教程
本教程翻译整理自 https://github.com/winterbe/java8-tutorial 本教程首发自个人网站: https://www.exception.site/java8/jav ...
- java8 新特性精心整理(全)
前言 越来越多的项目已经使用 Java 8 了,毫无疑问,Java 8 是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和 JVM 等方面的十多个新特 ...
- Java8新特性时间日期库DateTime API及示例
Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理.同样的,如果你现在依旧在项目中使用传统Date.Calendar和SimpleDateFormat等API ...
- Java8 新特性(三) - 日期时间对象以及一些其他特性
日期时间对象 关于日期时间的操作可以分为两种: 转换:与字符串的互相转换,与时间戳的互相转换 计算:计算两个时间点之间的间隔.时间点与时间段的计算(计算下周N.下个月D日.去年M月D日等等) Java ...
随机推荐
- c++ 获取文件创建时间、修改时间、访问时间、文件内容长度
int GetFileInfo(string& strPath, int& iCreateTime, int& iModifyTime, int& iAccessTim ...
- 推荐4款个人珍藏的IDEA插件!帮你写出不那么差的代码
@ 目录 Codota:代码智能提示 代码智能补全 代码智能搜索 Alibaba Java Code Guidelines:阿里巴巴 Java 代码规范 手动配置检测规则 使用效果 CheckStyl ...
- Java IO相关使用
date: 2020-06-14 14:42:22 updated: 2020-08-21 17:35:45 Java IO相关使用 1. 文件 创建 File 对象的三种方式 一个路径名:File( ...
- Java基础之类型转换总结篇
Java中,经常可以遇到类型转换的场景,从变量的定义到复制.数值变量的计算到方法的参数传递.基类与派生类间的造型等,随处可见类型转换的身影.Java中的类型转换在Java编码中具有重要的作用. ...
- 论文解读《Understanding the Effective Receptive Field in Deep Convolutional Neural Networks》
感知野的概念尤为重要,对于理解和诊断CNN网络是否工作,其中一个神经元的感知野之外的图像并不会对神经元的值产生影响,所以去确保这个神经元覆盖的所有相关的图像区域是十分重要的:需要对输出图像的单个像素进 ...
- D. The Wu 解析(思維、二進位運算)
Codeforce 1017 D. The Wu 解析(思維.二進位運算) 今天我們來看看CF1017D 題目連結 題目 略,請直接看原題 前言 官方解答實在看不懂...之後還記得的話再補那個做法吧 ...
- xml在spring中
平时用的最多的框架莫过Spring,但就算用了怎么久也一直对Spring配置文件的头部那一堆的XML Schema云里雾里的. 今天就来好好整整.俗话说,岁月是把杀猪刀,说不定哪天又忘了,好记性不如烂 ...
- 一起学Vue:CRUD(增删改查)
目标 使用Vue构建一个非常简单CRUD应用程序,以便您更好地了解它的工作方式. 效果页面 比如我们要实现这样列表.新增.编辑三个页面: 列表页面 新增页面 编辑页面 我们把这些用户信息保存到Todo ...
- Python爬虫练习(requests模块)
Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...
- iNeuOS工业互联平台,WEB组态(iNeuView)增加工程视图导入、导出功能,及优化和修复,发布:v3.2.1版本
目 录 1. 概述... 2 2. 平台演示... 2 3. 导出组态工程文件... 2 4. 导入组态工程文件... 3 1. 概述 iNe ...