Java8新特性系列(时间/日期)

题图:by pixel2013 From pixabay

上期我们介绍了Java8中的Optional,本期我们介绍Java8中新的时间日期API。

JSR

在讲之前,首先讲一下JSR,什么是JSR呢?Java Specification Requests,是Java规范提案。
常见的JSR有:

  • JSR-303 参数验证
  • JSR-310 时间
  • JSR-311 Restful API规范

JSR-310即时间规范标准:

在Java8之前,操作时间日期的类为:DateCalendar,第三方包如Joda-time
在Java8中,新增了许多时间日期API

Joda-time

引入Maven依赖

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.9.2</version>
</dependency>

核心类

  • Instant:不可变的类,用来表示时间轴上一个瞬时的点
  • DateTime:不可变的类,用来替换JDK的Calendar类
  • LocalDate:不可变的类,表示一个本地的日期,而不包含时间部分(没有时区信息)
  • LocalTime:不可变的类,表示一个本地的时间,而不包含日期部分(没有时区信息)
  • LocalDateTime:不可变的类,表示一个本地的日期-时间(没有时区信息)

用法举例

public static void main(String[] args) {
    DateTime today = DateTime.now();
    DateTime tomorrow = today.plusDays(1);
    DateTime oneHourAfter = today.plusHours(1);
    System.out.println(today.toString());
    System.out.println(tomorrow.toString());
    System.out.println(oneHourAfter.toString());

    DateTime day = new DateTime(2017,12,30,17,47,30);
    System.out.println(day.dayOfYear().getAsString());
    System.out.println(day.dayOfMonth().getAsString());
    System.out.println(day.dayOfWeek().getAsString());
}

结果:

2017-12-30T17:49:24.065+08:00
2017-12-31T17:49:24.065+08:00
2017-12-30T18:49:24.065+08:00
364
30
6

如果用过Joda-time的,那么Java8中新的时间日期API就很容易上手了。

Java8中新的时间日期API

LocalDate/LocalTime/LocalDateTime

  • now() :根据当前时间创建对象
  • of():根据指定日期/时间创建对象
  • plusDays/plusWeeks/plusMonths/plusYears 时间向后推移
  • minusDays/minusWeeks/minusMonths/minusYears 时间向前推移
  • plus/minus
  • withDayOfMonth/withDayOfYear/withMonth/withYear 修改
  • getDayOfMonth 获得月份天数(1-31)
  • getDayOfYear 获得年份天数(1-366)
  • getDayOfWeek 获得星期几(返回一个 DayOfWeek 枚举值)
  • getMonth 获得月份, 返回一个 Month 枚举值
  • getMonthValue 获得月份(1-12)
  • getYear 获得年份
  • until 获得两个日期之间的 Period 对象, 或者指定 ChronoUnits 的数字
  • isBefore/isAfter 比较两个 LocalDate
  • isLeapYear 判断是否是闰年

Instant 时间戳

用于“时间戳”的运算。它是以Unix元年(传统 的设定为UTC时区1970年1月1日午夜时分)开始 所经历的描述进行运算。

Duration 和 Period

  • Duration:用于计算两个“时间”间隔,Duration.between...
  • Period:用于计算两个“日期”间隔,Period.between...

Clock 时钟

Clock类提供了访问当前日期和时间的方法,Clock是时区敏感的,可以用来取代System.currentTimeMillis() 来获取当前的微秒数。某一个特定的时间点也可以使用Instant类来表示,Instant类也可以用来创建老的java.util.Date对象。

Clock clock = Clock.systemDefaultZone();  
long millis = clock.millis();  
Instant instant = clock.instant();  
Date date = Date.from(instant);

日期的操作

  • TemporalAdjuster:时间校正器。有时我们可能需要获取例如:将日期调整到“下个周日”等操作。
  • TemporalAdjusters:该类通过静态方法提供了大量的常用TemporalAdjuster的实现。

解析与格式化

java.time.format.DateTimeFormatter类:该类提供了三种格式化方法:

    1. 预定义的标准格式
    1. 语言环境相关的格式
    1. 自定义的格式
DateTimeFormatter isoDateTime = DateTimeFormatter.ISO_DATE_TIME;
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E");

时区的处理

Java8中加入了对时区的支持,带时区的时间为分别为:

  • ZonedDate
  • ZonedTime
  • ZonedDateTime

其中每个时区都对应着ID,地区ID都为 “{区域}/{城市}”的格式 例如 :Asia/Shanghai等,ZoneId:该类中包含了所有的时区信息

    1. getAvailableZoneIds() : 可以获取所有时区时区
    1. of(id) : 用指定的时区信息获取 ZoneId 对象
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容