Java 之 JDK 1.8 新增日期时间类型
一、原来的日期时间
Java1.0中包含了一个Date类,但是它的大多数方法已经在Java 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:
① 可变性:象日期和时间这样的类对象应该是不可变的。Calendar类中可以使用三种方法更改日历字段:set()、add() 和 roll()。
② 偏移性:Date中的年份是从1900开始的,而月份都是从0开始的。
③格式化:格式化只对Date有用,Calendar则不行。
④此外,它们也不是线程安全的,不能处理闰秒等。
二、新增日期时间类型
java 8中引入的java.time API 已经纠正了过去的缺陷,将来很长一段时间内它都会为我们服务。Java 8 吸收了 Joda-Time 的精华,以一个新的开始为 Java 创建优秀的 API。
java.time – 包含值对象的基础包
java.time.chrono – 提供对不同的日历系统的访问。
java.time.format – 格式化和解析时间和日期
java.time.temporal – 包括底层框架和扩展特性
java.time.zone – 包含时区支持的类
Java 8 吸收了 Joda-Time 的精华,以一个新的开始为 Java 创建优秀的 API。新的 java.time 中包含了所有关于时钟(Clock),本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。历史悠久的 Date 类新增了 toInstant() 方法,用于把 Date 转换成新的表示形式。这些新增的本地化时间日期 API 大大简化了了日期时间和本地化的管理。
三、java.time 类
1、本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)
LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储“生日、纪念日”等日期。
LocalTime表示一个时间,而不是日期
LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
|
方法名称 |
描述 |
|
now() / now(ZoneId zone) |
静态方法,根据当前时间创建对象/指定时区的对象 |
|
of() |
静态方法,根据指定日期/时间创建对象 |
|
getDayOfMonth()/getDayOfYear() |
获得月份天数(1-31) /获得年份天数(1-366) |
|
getDayOfWeek() |
获得星期几(返回一个 DayOfWeek 枚举值) |
|
getMonth() |
获得月份, 返回一个 Month 枚举值 |
|
getMonthValue() / getYear() |
获得月份(1-12) /获得年份 |
|
getHours()/getMinute()/getSecond() |
获得当前对象对应的小时、分钟、秒 |
|
withDayOfMonth()/withDayOfYear()/withMonth()/withYear() |
将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象 |
|
with(TemporalAdjuster t) |
将当前日期时间设置为校对器指定的日期时间 |
|
plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours() |
向当前对象添加几天、几周、几个月、几年、几小时 |
|
minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours() |
从当前对象减去几月、几周、几天、几年、几小时 |
|
plus(TemporalAmount t)/minus(TemporalAmount t) |
添加或减少一个 Duration 或 Period |
|
isBefore()/isAfter() |
比较两个 LocalDate |
|
isLeapYear() |
判断是否是闰年(在LocalDate类中声明) |
|
format(DateTimeFormatter t) |
格式化本地日期、时间,返回一个字符串 |
|
parse(Charsequence text) |
将指定格式的字符串解析为日期、时间 |
2、带时区的日期、时间的处理
ZonedDateTime:一个在ISO-8601日历系统时区的日期时间,如 2007-12-03T10:15:30+01:00 Europe/Paris。
其中每个时区都对应着ID,地区ID都为“{区域}/{城市}”的格式,例如:Asia/Shanghai等
now():使用系统时间获取当前的ZonedDateTime
now(ZoneId):返回指定时区的ZonedDateTime
ZoneId:该类中包含了所有的时区信息,一个时区的ID,如 Europe/Paris
getAvailableZoneIds():静态方法,可以获取所有时区信息
of(String id):静态方法,用指定的时区信息获取ZoneId对象
Clock:使用时区提供对当前即时、日期和时间的访问的时钟。
Demo:
public static void main(String[] args) {
Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
for (String string : availableZoneIds) {
System.out.println(string);
}
ZonedDateTime t = ZonedDateTime.now();
System.out.println(t);
ZonedDateTime t1 = ZonedDateTime.now(ZoneId.of("America/New_York"));
System.out.println(t1);
// Clock clock = Clock.systemDefaultZone();
Clock c = Clock.system(ZoneId.of("America/New_York"));
System.out.println(c.getZone());
System.out.println(c.instant());
}
3、 java.time.format.DateTimeFormatter 类
该类提供了三种格式方法:
预定义的标准格式。如:ISO_DATE_TIME;ISO_DATE
本地化相关的格式。如:ofLocalizedDate(FormatStyle.MEDIUM)
自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
Demo:
@Test
public void test12(){
LocalDateTime now = LocalDateTime.now(); DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒 E 是这一年的D天");
String string = df.format(now);
System.out.println(string); //预定义模式
DateTimeFormatter df2 = DateTimeFormatter.ISO_DATE_TIME;
System.out.println(df2.format(now)); DateTimeFormatter df3 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
System.out.println(df3.format(now)); DateTimeFormatter df4 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
System.out.println(df4.format(now)); DateTimeFormatter df5 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(df5.format(now));
}
Java 之 JDK 1.8 新增日期时间类型的更多相关文章
- JDK 1.8 完整日期时间Api (文末附示例)
一.背景 jdk 1.8 之前, Java 时间使用java.util.Date 和 java.util.Calendar 类. Date today = new Date(); System.out ...
- 【Java 与数据库】JDBC中日期时间的处理技巧
JDBC中日期时间的处理技巧 详谈Java.util.Date和Java.sql.Date 基础知识 Java中用类java.util.Date对日期/时间做了封装,此类提供了对年.月.日.时.分.秒 ...
- MySQL学习分享-->日期时间类型
日期时间类型 ①如果要用来表示年月日时分秒,一般使用datetime类型: ②如果要用来表示年月日,一般使用date类型: ③如果要表示时分秒,一般使用time类型: ④如果只是表示年份,一般使用ye ...
- Mysql 建表时,日期时间类型选择
mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 D ...
- SQL Server 2008对日期时间类型的改进
微软在备受多年的争议后,终于对日期时间数据类型开刀了,在新版的SQL Server 2008中一口气增加了4种新的日期时间数据类型,包括: Date:一个纯的日期数据类型. Time:一个纯的时间数据 ...
- MySQL之日期时间类型
mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 D ...
- mysql日期时间类型总结
MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ------------ ---- ...
- mysql 日期时间类型 自动转型 及 运算
日期时间类型自动转型 -- now().字符串.数字转datetime类型 create table t(dt datetime);insert into t values(now());insert ...
- MySQL 中的日期时间类型
日期时间类型中包含以下几种数据类型: DATE TIME DATETIME TIMESTAMP YEAR 各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0.TIMESTAMP ...
随机推荐
- 201871010104-陈园园 《面向对象程序设计(java)》第八周学习总结
201871010104-陈园园 <面向对象程序设计(java)>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010124-王生涛《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...
- opencv获得轮廓内的所有坐标
std::vector<std::vector<cv::Point>> fillContour(const std::vector<std::vector<cv:: ...
- MySQL中连接超时自动断开的解决方案
前言: MySQL数据库一般默认的连接超时时间为3600s(1小时),但是在进行大规模的线程事务操作时,一个连接会一直等待执行,这时候如果数据库的超时时间设置的过短,就可能会出现Mysql数据连接自动 ...
- Educational Codeforces Round 57 (Rated for Div. 2) C 正多边形 + 枚举
https://codeforces.com/contest/1096/problem/C 题意 问是否存在一正多边形内三点构成的角度数为ang,若存在输出最小边数 题解 三点构成的角是个圆周角,假设 ...
- ASP.NET CoreMVC 中的视图
ASP.NET Core MVC 中的视图 MVC 中的视图 用于显示Controller提供给它的 Model 的业务数据. 视图是带有嵌入 Razor 标记的 HTML 模板. 如果编程语言是 C ...
- 洛谷P4593 [TJOI2018]教科书般的亵渎
小豆喜欢玩游戏,现在他在玩一个游戏遇到这样的场面,每个怪的血量为\(a_i\),且每个怪物血量均不相同,小豆手里有无限张"亵渎".亵渎的效果是对所有的怪造成\(1\)点伤害,如果 ...
- Codeforces Round 573 (Div.1) 题解
这场怎么说呢……有喜有悲吧. 开场先秒了 A.看到 B,感觉有点意思,WA 了 2 发后也过了. 此时还在 rk 前 200. 开 C,一看就不可做.跟榜,切 D 人数是 C 的两倍. 开 D.一眼感 ...
- [报名中] 腾讯技术专家为你揭秘"音视频及融合通信技术"
| 导语 6月29日,北京东直门亚朵S酒店,云+社区邀您参加<音视频及融合通信技术>沙龙活动,深度探讨音视频及融合通信技术的发展及实践,领略前沿,共创价值. 数字多媒体技术的不断发展对音视 ...
- sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理
.关系型数据库 有库有表,有关系 非关系型数据库 存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...