java 8中新的日期和时间API
java 8中新的日期和时间API
使用LocalDate和LocalTime
LocalDate的实例是一个不可变对象,它只提供了简单的日期,并不含当天的时间信息.另外,它也不附带任何与时区相关的信息
LocalDate实例提供了多种方法来读取常用的值,比如年份,月份,星期几等
LocalDate date = LocalDate.of(2014,3,18);
int year = date.getYear();
Month month = date.getMonth();
int day = date.getDayOfMonth();
DayOfWeek dow = date.getDayOfWeek();
int len = date.lengthOfMonth();
boolean leap = date.isLeapYear();
//获取当前的日期
LocalDate today = LocalDate.now();
你还可以通过传递一个TemporalField参数给get方法拿到童谣给您的信息.
int year = date.get(ChronoField.YEAR);
int month = date.get(ChronoField.MONTH_OF_YEAR);
int day = date.get(ChronoField.DAY_OF_MONTH);
类似的,一天中的时间,比如:13:45:20,可以使用LocalTime类表示
LocalTime time = LocalTime.of(13,45,20);
int hour = time.getHour();
int minute = time.getMinute();
int second = time.getSecond();
两者都可以通过解析代表他们的字符串创建;
LocalDate date = LocalDate.parse("2014-03-18");
LocalTime time = LocalTime.parse("13:45:20");
合并日期和时间
这个复合类名叫LocalDateTime,是LocalDate和LocalTime的合体.它同时表示了日期和时间,但不带有时区信息
//2014-03-18T13:45:20
LocalDateTime dt1 = LocalDateTime.of(2014,Month.MARCH,18,13,45,20);
LocalDateTime dt2 = LocalDateTime.of(date,time);
LocalDateTime dt3 = date.atTime(13,45,20);
LocalDateTime dt4 = date.atTime(time);
LocalDateTime dt5 = date.atTime(date);
可以从LocalDateTime中提取LocalDate或者LocalTime
LocalDate date1 = dt1.toLocalDate();
LocalTime time1 = dt1.toLocalTime();
机器的日期和时间格式
java.time.Instant类对时间建模的方式,基本上是以Unix元年时间(1970年1月1日午夜时分)开始所经历的秒数进行计算
Instant instant = Instant.ofEpochSecond(3);//1970-01-01T00:00:03Z
Instant.ofEpochSecond(3, 1_000_000_000);//1970-01-01T00:00:04Z 第二参数以纳秒为单位的参数值
Duration或Period
Duration类的静态工厂方法between
Duration.between(time, time2);
Duration.between(dateTime1, dateTime2);
Duration.between(instant1, instant12);
由于LocalDateTime和Instant是为不同的目的而设计的,一个是为了便于人阅读使用,另一个是为了便于机器处理.所以不能将二者混用
此外,由于Duration类主要用于以秒和纳秒衡量时间的长短,不能仅向between方法传递一个LocalDate对象做参数
Period类的between,可以使用得到两个LocalDate之间的时长
Period between = Period.between(LocalDate.of(2014, 3, 8), LocalDate.of(2014, 3, 18));
创建Duration和Period对象
Duration.ofMillis(3);
Duration.of(3, ChronoUnit.MINUTES);
Period.ofDays(10);
Period.ofWeeks(3);
Period.of(2, 6, 1);
操纵,解析和格式化日期
如果已经有一个LocalDate对象,想要创建它的一个修改版,最直接也最简单的方法是使用withAttribute方法.
LocalDate of = LocalDate.of(2014, 3, 18);
LocalDate localDate = of.withYear(2011);
LocalDate localDate1 = localDate.withDayOfMonth(25);//2011-03-25
localDate1.with(ChronoField.MONTH_OF_YEAR,9);//2011-09-25
LocalDate localDate2 = of.plusWeeks(1);//2014-03-25
LocalDate localDate3 = localDate2.minusYears(3);//2011-03-25
localDate3.plus(6,ChronoUnit.MONTHS);//2011-09-25
使用TemporalAdjuster
LocalDate of = LocalDate.of(2014, 3, 18);
LocalDate with = of.with(nextOrSame(DayOfWeek.SUNDAY));//2014-03-23
LocalDate with1 = with.with(lastDayOfMonth());//2014-03-31
方法名 | 描述 |
---|---|
dayOfWeekInMonth | 创建一个新的日期,它的值为同一个月中每一周的第几天 |
firstDayOfMonth | 当月第一天 |
firstDayOfNextMonth | 下个月第一天 |
firstDayOfNextYear | 明年的第一天 |
firstDayOfYear | |
lastDayOfMonth | |
lastDayOfNextMonth | |
lastDayOfNextYear | |
lastDayOfYear | |
lastInMonth | 它的值为同一个月中,最后一个符合星期几要求的值 |
next/previous | 将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期 |
nextOrSame/previousOrSame | 将其值设定为日期调整后或者调整前,第一个符合指定星期几要求的日期,如果该日期已经符合要求,直接返回该对象 |
打印输出及解析日期-时间对象
LocalDate of1 = LocalDate.of(2014, 3, 18);
String format = of1.format(DateTimeFormatter.BASIC_ISO_DATE);//20140318
String format1 = of1.format(DateTimeFormatter.ISO_LOCAL_DATE);//2014-03-18
可以使用工厂方法parse达到重创改日期对象
LocalDate parse = LocalDate.parse("20140318", DateTimeFormatter.BASIC_ISO_DATE);//2014-03-18
LocalDate parse1 = LocalDate.parse("2014-03-18", DateTimeFormatter.ISO_LOCAL_DATE);//2014-03-18
按照摸个模式创建DateTimeFormatter
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate of1 = LocalDate.of(2014, 3, 18);
String format = of1.format(formatter);
LocalDate parse = LocalDate.parse(format, formatter);
java 8中新的日期和时间API的更多相关文章
- Java 8 (11) 新的日期和时间API
在Java 1.0中,对日期和时间的支持只能依赖java.util.Date类.这个类只能以毫秒的精度表示时间.这个类还有很多糟糕的问题,比如年份的起始选择是1900年,月份的起始从0开始.这意味着你 ...
- 《Java 8 in Action》Chapter 12:新的日期和时间API
在Java 1.0中,对日期和时间的支持只能依赖java.util.Date类.同时这个类还有两个很大的缺点:年份的起始选择是1900年,月份的起始从0开始. 在Java 1.1中,Date类中的很多 ...
- Java8系列 (六) 新的日期和时间API
概述 在Java8之前, 我们一般都是使用 SimpleDateFormat 来解析和格式化日期时间, 但它是线程不安全的. @Test public void test() { SimpleDate ...
- Java8 新的日期和时间API(笔记)
LocalDate LocalTime Instant duration以及Period 使用LocalDate和LocalTime //2017-03-20 LocalDate date = Loc ...
- Java8新特性--日期和时间API
如何正确处理时间 现实生活的世界里,时间是不断向前的,如果向前追溯时间的起点,可能是宇宙出生时,又或是是宇宙出现之前, 但肯定是我们目前无法找到的,我们不知道现在距离时间原点的精确距离.所以我们要表示 ...
- Java基础篇(04):日期与时间API用法详解
本文源码:GitHub·点这里 || GitEE·点这里 一.时间和日期 在系统开发中,日期与时间作为重要的业务因素,起到十分关键的作用,例如同一个时间节点下的数据生成,基于时间范围的各种数据统计和分 ...
- 计算机程序的思维逻辑 (95) - Java 8的日期和时间API
本节继续探讨Java 8的新特性,主要是介绍Java 8对日期和时间API的增强,关于日期和时间,我们在之前已经介绍过两节了,32节介绍了Java 1.8以前的日期和时间API,主要的类是Date和 ...
- Java编程的逻辑 (95) - Java 8的日期和时间API
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- Java8 日期与时间 API
在 Java 中,想处理日期和时间时,通常都会选用 java.util.Date 这个类进行处理.不过不知道是设计者在当时没想好还是其它原因,在 Java 1.0 中引入的这个类,大部分的 API 在 ...
随机推荐
- 苹果二代TWS无线耳机AirPods调研
产品介绍 苹果AirPods二代自从2018年9月份上市以来,到现在将近一年的时间了,据江湖传闻,苹果AirPods的总售卖个数,已经超过了5000W部,这样价格的TWS耳机,能够卖那么多的量,估计也 ...
- mysql中TINYINT的取值范围
在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127.无符号的范围是0到255(见官方<MySQL 5.1参考手册>http://dev.mysql.com ...
- Java多线程(2)线程锁
多线程访问同一个资源进行读写操作,就很容易出一些问题(比如我们常见的读者写者,生产者消费者模型)所以我们会选择对他们设置信号量或者加锁,来限制同一个时刻只有一个线程对某个对象进行操作. 多线程是一个蛮 ...
- Git小技巧之使用Rebase命令合并提交
想要获取更多文章可以访问我的博客 - 代码无止境. 在日常的开发过程中,我们一个功能可能会有很多次提交.而且我们公司的开发是不允许直接往公司仓库提交代码,所以需要fork到自己的仓库然后merge过去 ...
- php中对象类型与数组之间的转换
1.刚看视频学习的时候看到一个困扰很久的问题, 有时候我们在进行做项目的时候会碰到的一个小问题.举一个小例子. 获取一个xml文件里面的数据. xml.xml文件如下: <?xml versi ...
- TCP UDP (转)
互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能.为了改善这种缺点,大牛弄出了TCP/IP协议.现在几乎所有的操作 ...
- CTSC&APIO被教做人记
DAY 0: 早早起来从衡水出发,在去火车站的路上明白了HZOI总是差点误车的真相……上了绿皮火车之后由于没网没流量就开始看政治书应付学考,然而并不是很能看进去,感觉初中学的比高中学的不知道高到哪里去 ...
- kafka介绍及安装配置(windows)
Kafka介绍 Kafka是分布式的发布—订阅消息系统.它最初由LinkedIn(领英)公司发布,使用Scala和Java语言编写,与2010年12月份开源,成为Apache的顶级项目.Kafka是一 ...
- 深入理解Java虚拟机一 阅读笔记
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...
- linux 定时任务 crontabs 安装及使用方法
boom 安装 crontab yum install crontabs centos7 自带了我没有手动去装 启动/关闭 service crond start // 启动服务 service cr ...