java8日期_Java8日期与时间

我们知道Java8一个比较大的改动就是引入了新的表示日期和时间的API,还是很有必要抽点时间了解一下基本的用法。

Java8之前的问题

在讨论Java8的API之前,我们先看看原来API的问题。我们知道Java8之前只有java.util.Date和java.util.Calendar来表示和处理时间,它们的一些常见的问题如下:Date返回getMonth返回值为0~11,分别对应1~12月;

Calendar处理夏令时可能会引起问题;

这两个类以及DateTimeFormat都不是线程安全的;

缺乏很多时间概念,如无时区日期,时间,间隔等等;

缺乏很多常用的日期操作,如计算两个日期相差天数

JSR 310就是这样应运而生,Java8的API也是依据此规范而来。This JSR will tackle the problem of a complete date and time model, including dates and times (with and without time zones), durations and time periods, intervals, formatting and parsing.

概览包名功能java.time表示日期、时间、瞬时和期间的公共类

java.time.chrono非ISO日历系统的API

java.time.format格式化类

java.time.temporal使用fields,units,adjusters访问日期和时间

java.time.zone支持时区及其规则

常用类类功能Instant自1970年1月1日以来的一个时间点,以纳秒为单位

Duration时长,以纳秒为单位

Calendrical与底层API有关

DateTimeFields存储域——值对的一个映射,不要求一致

DayOfWeek星期中的一天

LocalDate本地日期(年月日),没有调整

LocalTime本地时间(时分秒),没有调整

LocalDateTimeLocalDate和LocalTime的组合

MonthDay月日

OffsetTime带时区的偏移时间,不包括日期或时区值

OffsetDateTime带时区偏移的日期时间,不包括时区值

Period时间长度的描述,如两个月零三天

ZonedDateTime带时区和偏移的日期时间

Year年

YearMonth年月

ZoneOffset从UTC开始的时间偏移(时分秒)

ZoneId定义一个时区,如Canada/Eastern,及其转换规则

如果对哪个类不是特别理解,打开IDE,简单的操作一下即可。

简单用例

查看当天日期1

2

3

4

5

6

7

8System.out.println(LocalDate.now());

System.out.println(LocalTime.now());

System.out.println(LocalDateTime.now());

output:

2017-01-03

16:24:11.520

2017-01-03T16:24:11.520

格式化日期和时间

下面是DateTimeFormatter类提供的格式化样式,只需简单了解一下即可,需要时可以查询DateTimeFormatter文档。

还有一个值得注意的是,模式中字母的重复次数对应这字符串预期长度。例如”MMM”对应”Jan”,””MMMM”对应”January”。你可能会好奇为什么”MMMM”为什么不是对应”Janu”,这点可以参考上面的文档,如何对应在文档中也有说明。符号含义显示形式例子G公元文本AD;Anno Domini

y公元年年份2004;04

u公元年年份公元年和y相同,公元前3年,y返回3,u返回-2

D一年中的第几天数字189

M/L月数字/文本7;07;Jul;July;J

d一月中的第几天数字10

Q/q一年中的第几季数字/文本3;03;Q3,3rd quarter

Y年年份1996;96

w一年中的某一周数字27

W一个月中的某一周数字4

e/c星期中的本地天数数字/文本2;02;Tue;Tuesday;T

E星期中的第几天文本Tue;Tuesday;T

F某月中星期几出现的序数(第几个)数字3

aAM/PM表示文本PM

h12小时制的小时数(1~12)数字12

K12小时制的小时数(0~11)数字0

k24小时制的小时数(1~24)数字24

H24小时制的小时数(0~23)数字0

m小时内第几分数字30

s一分内第几秒数字55

S秒的小数(毫秒)小数978

A千分之一天数字1234

n纳秒数字987654321

N十亿分之一(纳)天数字1234000000

V时区ID值文本America/Los_Angeles;Z;-08:30

z时区名文本Pacific Standard Time;PST

X时区偏移ZOffset-XZ;-08;-0830;-08:30;-083015;-08:30:15

x时区偏移Offset-x+0000;-08;-0830;-08:30;-083015;-08:30:15

Z时区的GMT偏移Offset-Z+0000;-0800;-08:00

O本地时区偏移Offset-OGMT+8;GMT+08:00;UTC-08:00

p填充下一个填充符11

2

3

4

5

6

7DateTimeFormatter df = DateTimeFormatter.ofPattern("yy/LL/dd");

System.out.println(df.format(LocalDate.now()));

System.out.println(LocalDate.parse("17/01/04",df));

output:

17/01/04

2017-01-04

日期和时间戳转换1

2

3

4

5

6

7

8

9

10System.out.println(ZonedDateTime.now());

System.out.println(ZonedDateTime.now().toInstant().getEpochSecond());

Instant instant = Instant.ofEpochSecond(1483492172L);

ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.of("Asia/Shanghai"));

System.out.println(zonedDateTime);

output:

2017-01-04T09:13:39.624+08:00[Asia/Shanghai]

1483492419

2017-01-04T09:09:32+08:00[Asia/Shanghai]

字符串解析为日期1

2

3

4

5

6

7

8

9

10

11

12

13

14

15LocalDate localDate = LocalDate.parse("2016-01-04");

System.out.println(localDate);

DateTimeFormatter pattern = DateTimeFormatter.ofPattern("dd LLL yyyy");

System.out.println(pattern.format(LocalDate.now()));

//注意LocalDate是和本地相关的,所以要用一月,上面就是看看本地输出格式

DateTimeFormatter df = DateTimeFormatter.ofPattern("dd MMM yyyy");

System.out.println(LocalDate.parse("04 一月 2011", df));

output:

2016-01-04

04 一月 2017

2011-01-04

日期间的计算1

2

3

4

5

6

7

8

9

10

11LocalDate last = LocalDate.of(2016, 1, 1);

LocalDate now = LocalDate.now();

Period diff = Period.between(last, now);

System.out.println(diff);

//今天是2017/1/4

Period p = Period.ofDays(1);

System.out.println(now.plus(p));

output:

P1Y3D

2017-01-05

参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaone_为JavaOne 2014做好准备!

javaone保持那个想法! 是的,我希望我能在Java One 2014上做演讲-但我现在只值得在梦里做到这一点! 但是,没有什么阻止我遵循Java One并跟踪有关我最喜欢的主题的会话/对话。 我希望Oracle能够像我们2013年版那样,像我…

代码逻辑分析_双11模块79.34%的前端代码是怎样智能生成的?

作者|妙净、波本最近几年,AI 渗透到开发领域的方方面面。在前端领域,设计稿生成代码(简称 D2C)就是一个例子。其目标在于通过 AI 助力前端提效升级,杜绝简单重复性的工作内容。今年“双十一”,阿里的 D2C 覆盖了天猫淘…

datax导入MySQL报错_导入MySQL方法对比

使用datax导入1、使用自增id记录数耗时(秒)TPS42488823471224433404813403882722、不使用自增id,使用雪花算法生成id后导入记录数耗时(秒)TPS424888268062483340481365555096使用MySQL命令load导入1、csv带雪花id> select * from l_wish_log_snow_copy into outf…

项目织机

为什么为什么? Java 8流背后的驱动程序之一是并发编程。 在流管道中,指定要完成的工作,然后任务将自动分发到可用处理器上: var result myData.parallelStream().map(someBusyOperation).reduce(someAssociativeBinOp).orElse(…

java mybatis 教程_(整理)MyBatis入门教程(一)

本文转载:本人文笔不行,根据上面博客内容引导,自己整理了一些东西首先给大家推荐几个网页:MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBa…

2020版北大中文核心期刊目录_收藏备用最新版:《中文核心期刊要目总览》北大中文核心期刊目录...

《中文核心期刊要目总览》是学术界对某类期刊的定义,一种期刊等级的划分。它的对象是,中文学术期刊,是根据期刊影响因子等诸多因素所划分的期刊。中文核心期刊是北京大学图书馆联合众多学术界权威专家鉴定,目前受到了学术界的广泛…

java中多个输入框搜索_如何在一个搜索框中输入多个字段的值进行查询?

搜索export default {data() {return {input: ,//用来接受input框的值name:,// 用来存储foreach的对应的值id:,// 用来存储foreach的对应的值dq:// 用来存储foreach的对应的值}},methods:{submit(){console.log(this.input);// 打印let str this.input;// 声明变量接受input的…

fedora如何隐藏顶部状态栏_藏在 iOS 13 里的 9 个隐藏小技巧

正文共:1797字 10图1.从控制中心直接选择无线网络和蓝牙配件苹果首次在 iOS 7 中加入了控制中心,允许用户进行一些快速操作,例如打开/关闭飞行模式、打开/关闭蜂窝网络、打开/关闭 Wi-Fi 等。但很多控制都只停留在一级菜单,你只能…

摇篮配置

在这篇文章中,我们将介绍有关Gradle配置的综合文章。 1.技术 Gradle是用于自动任务管理的开源构建工具。 它基于Apache Ant,Apache Maven的概念。 Gradle是使用Groovy语言开发的。 Gradle是使用基于Groovy的领域特定语言(DSL)开发…

java的封装性的优点_18、Java的三大特性之封装

Java的三大特性java是一个面向对象的语言,所以java也有面向对象语言的三大特性:继承,封装,多态,任何一个java项目,都会用到这三种特性,所以掌握好这三大特性非常的重要。封装我们为什么要使用封…

groovy 字符串截取最后一个_Java基础篇——字符串详解

字符串的声明字符串是内存中连续排列的0个或多个字符。不变字符串是指字符串一旦创建,其内容就不能改变,Java中使用String类来处理不变字符串,在对String类的实例进行查找、比较、拼接等操作时,既不能输入新字符,又不能…

eclipse插件开发_开发Eclipse插件

eclipse插件开发最近,我开始与一个团队合作开发Eclipse插件。 团队开发了一个很棒的插件,可以实现预期的目的。 因此,我检查了源并尝试构建它。 项目源包含所有必需的库,并且只能在Eclipse中构建。 在当今不断交付的世界中&#x…

java中链式调用_Java及Android中常用链式调用写法简单示例

本文实例讲述了Java及Android中常用链式调用写法。分享给大家供大家参考,具体如下:最近发现,目前大火的许多开源框架中,大多都使用了一种"(方法).(方法).(方法)"的形式进行调用,最典型的就是RxJava。android…

Java记录

https://openjdk.java.net/jeps/359概述了新的Java功能,该功能可能会/将在某些将来的Java版本中实现。 JEP建议使用一种新型的“班级”:记录。 JEP中的示例内容如下: record Range( int lo, int hi) { public Range { if (lo > hi) /* ref…

C什么k什么_K线图基础知识丨什么是K线散兵坑形态?K线散兵坑形态的操作与案例详解...

本文总共999字,预计阅读需要3分钟今天我们给大家带来的是K线散兵坑形态,那么K线散兵坑形态应该怎么来操作呢?今天我们就结合相应的实战案例来为大家讲解一下吧。K线散兵坑形态的简介散兵坑是指在股价缓慢上涨过程中.成交量也逐渐放大&#xf…

support v4官方下载_掌心长兴客户端下载-掌心长兴ap下载v4.1.4 安卓官方版

掌心长兴app是一款为广大用户开发的新闻资讯软件。在这里用户可以清晰的了解今日热点新闻,最新新闻直播电台应有尽有!让你全方面了解周边新鲜事!还有各种常用功能的代办查询服务。有需要的用户,欢迎现在下载体验哦掌心长兴客户端介…

java简单计算机程序_JAVA程序编的简单计算器程序??

1 文件名:Calculate_GUI。javaimport javax。swing。*;import t。Container;import t。event。*;public class Calculate_GUI extends JFrame{private JPanel p1;private JButton keyButton[]new JButton[16],signButton,clearButton,deleteButton;private JTextFie…

javafx 调用java_Java验证(javafx)

javafx 调用java验证是核心javafx框架所缺少的一件事。 为了弥补这一空白, controlsfx中已经存在一个第三方验证库 。 但是,我有一个问题:它不是在考虑FXML的情况下创建的。 这并不是说它不是一个很好的库,只是错过了这个细节&…

win10分辨率不能调整_Win10系统分辨率不能修改怎么办?屏幕分辨率的调节方法...

Win10系统电脑屏幕分辨率无法调节怎么办?电脑屏幕分辨率不能修改怎么办?近日有很多用户询问电脑显示器分辨率不能修改的问题,下面就给大家分享解决方法。解决方法:1、在win10系统桌面空白处单击鼠标右键,在弹出的菜单中…

java springmvc权限校验_详解Spring MVC使用Filter实现登录及权限验证判断

登录和权限验证判断在后台管理系统中是最常用的功能,这部分代码是比较固定和独立的,为了减少对业务代码入侵性,一般我会考虑使用Filter来实现,下面我就来详细说一下我的实现思路和代码:前台页面:String pat…