`
rensanning
  • 浏览: 3553117 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38222
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607645
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682830
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89560
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:402165
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69768
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91853
社区版块
存档分类
最新评论

Java 8 之 新日期时间API

    博客分类:
  • Java
阅读更多
Joda-Time作者Stephen Colebourne领导完成的JSR-310已经随着Java 8的Release正式发布。JSR-310的API和Joda-Time是兼容的,但经过了重新设计。Google一下网上已经有很多介绍,有人说JSR-310有些过度设计,“不管你喜不喜欢他,他都带着诚意扑面而来了”。

Joda-Time的介绍:http://rensanning.iteye.com/blog/1546652

关于JSR-310 和 Joda-Time
http://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html
https://www.infoq.com/news/2010/03/jsr-310
http://blog.joda.org/2010/12/what-about-jsr-310_153.html
http://blog.joda.org/2014/11/converting-from-joda-time-to-javatime.html

(1)系统时间
LocalDate date = LocalDate.now();
System.out.println(date.getYear() + "/" + date.getMonthValue() + "/" + date.getDayOfMonth()); // 2014/3/21

LocalTime time = LocalTime.now();
System.out.println(time.getHour() + ":" + time.getMinute() + ":" + time.getSecond()); // 16:39:22
// ***没有提供  getMillis() 方法
System.out.println(time.get(ChronoField.MILLI_OF_SECOND)); // 859

LocalDateTime dateTime = LocalDateTime.now();
System.out.println(dateTime.getYear() + "/" + dateTime.getMonthValue() + "/" + dateTime.getDayOfMonth()
		   + " " + dateTime.getHour() + ":" + dateTime.getMinute() + ":" + dateTime.getSecond()); // 2014/3/21 16:39:22

Clock clock = Clock.systemDefaultZone();
System.out.println(clock.millis()); // 1395391162859


(2)特定日期
LocalDate myDate = LocalDate.of(2013, 12, 4);
System.out.println(myDate.getYear() + "/" + myDate.getMonthValue() + "/" + myDate.getDayOfMonth()); // 2013/12/4

LocalDate independenceDay = LocalDate.of(2014, Month.JULY, 4);
DayOfWeek dayOfWeek = independenceDay.getDayOfWeek();
System.out.println(dayOfWeek);    // FRIDAY

LocalTime myTime = LocalTime.of(10, 30, 45);
System.out.println(myTime.getHour() + ":" + myTime.getMinute() + ":" + myTime.getSecond()); // 10:30:45

LocalDateTime myDateTime1 = LocalDateTime.of(2013, 12, 4, 10, 30, 45);
System.out.println(myDateTime1.getYear() + "/" + myDateTime1.getMonthValue() + "/" + myDateTime1.getDayOfMonth()
		   + " " + myDateTime1.getHour() + ":" + myDateTime1.getMinute() + ":" + myDateTime1.getSecond()); // 2013/12/4 10:30:45

LocalDateTime myDateTime2 = LocalDateTime.of(myDate, myTime);
System.out.println(myDateTime2.getYear() + "/" + myDateTime2.getMonthValue() + "/" + myDateTime2.getDayOfMonth()
		   + " " + myDateTime2.getHour() + ":" + myDateTime2.getMinute() + ":" + myDateTime2.getSecond()); // 2013/12/4 10:30:45


(3)格式化
// Date -> String
LocalDate formatDate1 = LocalDate.of(2013, 12, 4);
String dateString = formatDate1.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
System.out.println(dateString); // 2013/12/04

// String -> Date
LocalDate formatDate2 = LocalDate.parse("2013/12/04", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
System.out.println(formatDate2); // 2013-12-04


(4)日期转换
// LocalDate -> LocalDateTime
LocalDate changeDate1 = LocalDate.of(2013, 12, 4);
LocalDateTime changeDateTime1 = changeDate1.atTime(10, 30, 45);
System.out.println(changeDateTime1); // 2013-12-04T10:30:45
 
// LocalTime -> LocalDateTime
LocalTime time2 = LocalTime.of(10, 30, 45);
LocalDateTime dateTime2 = time2.atDate(LocalDate.of(2013, 12, 4));
System.out.println(dateTime2); // 2013-12-04T10:30:45
 
// LocalDateTime -> LocalDate, LocalTime
LocalDateTime dateTime3 = LocalDateTime.of(2013, 12, 4, 10, 30, 45);
LocalDate date3 = dateTime3.toLocalDate();
System.out.println(date3); // 2013-12-04
LocalTime time3 = dateTime3.toLocalTime();
System.out.println(time3); // 10:30:45


(5)日期加减
LocalDate today = LocalDate.now();
LocalDate twoDaysAfter = today.plusDays(2L); // 2天后
LocalDate threeDaysBefore = today.minusDays(3L); // 3天前
LocalDate oneYearsAfter = today.plus(1L, ChronoUnit.YEARS);// 1年后
LocalDate twoWeeksBefore = today.minus(2L, ChronoUnit.WEEKS); // 2周前
LocalDate newDate = LocalDate.now().plus(Period.of(3, 2, 1)); // 3年2月1天后


(6)计算间隔
LocalDateTime d1 = LocalDateTime.of(2013, 11, 4, 10, 30, 45);
LocalDateTime d2 = LocalDateTime.of(2013, 12, 4, 10, 30, 45);
Duration duration = Duration.between(d1, d2);
System.out.println(duration.toDays()); // 30


(7)日期比较
LocalDate compDate1 = LocalDate.of(2013, 12, 4);
LocalDate compDate2 = LocalDate.of(2013, 11, 4);
System.out.println(compDate1.isBefore(compDate2)); // false
System.out.println(compDate1.compareTo(compDate2)); // 1

       
(8)和java.util.Date的转换
// LocalDateTime -> Date
LocalDateTime cDateTime = LocalDateTime.now();
Instant instant = cDateTime.atZone(ZoneId.systemDefault()).toInstant();
Date cDate = Date.from(instant);
System.out.println(cDate); // Fri Mar 21 16:39:22 CST 2014
 
// Date -> LocalDateTime
Date date2 = new Date();
Instant instant2 = date2.toInstant();
LocalDateTime dateTimeFromDate = LocalDateTime.ofInstant(instant2, ZoneOffset.systemDefault());
System.out.println(dateTimeFromDate); // 2014-03-21T16:39:22.890

// Calendar -> LocalDateTime
Calendar cal = Calendar.getInstance();
LocalDateTime dateTimeFromCal = LocalDateTime.ofInstant(cal.toInstant(), ZoneOffset.systemDefault());
System.out.println(dateTimeFromCal); // 2014-03-21T16:39:22.890


关于java.util.Date这篇文章说的很详细:
https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/

(9)时区
ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId.toString()); // Asia/Shanghai

ZoneOffset zoneOffset = ZoneOffset.ofHours(1);
System.out.println(zoneOffset.toString()); // +01:00

ZoneId zone1 = ZoneId.of("Asia/Tokyo");
System.out.println(zone1.getRules()); // ZoneRules[currentStandardOffset=+09:00]
LocalTime now1 = LocalTime.now(zone1);
System.out.println(now1); // 17:39:22.890

ZonedDateTime jaTime = ZonedDateTime.of(2014, 1, 31, 10, 0, 0, 0, zone1);
System.out.println(jaTime); // 2014-01-31T10:00+09:00[Asia/Tokyo]


(10)日本时间
JapaneseDate jdate1 = JapaneseDate.of(2013, 12, 4);
System.out.println(jdate1); // Japanese Heisei 25-12-04    
JapaneseDate jdate2 = JapaneseDate.of(JapaneseEra.HEISEI, 25, 12, 4);
System.out.println(jdate2); // Japanese Heisei 25-12-04


http://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html
http://java.dzone.com/articles/deeper-look-java-8-date-and
http://www.coppermine.jp/docs/programming/2013/12/jsr310-tips.html
分享到:
评论

相关推荐

    java8中文api

    总的来说,"java8中文api"这个文档涵盖了Java 8的所有新特性和重要API,包括Lambda表达式、Stream API、函数式接口、日期和时间API、Optional类以及并发改进等。无论你是初学者还是有经验的开发者,这个文档都将是你...

    java8时间api

    Java 8 时间API是Java平台的重大改进之一,它引入了全新的日期和时间处理库,显著提高了开发者处理日期和时间的便利性。这个API遵循ISO-8601标准,并提供了丰富的类来支持日期、时间、时区、持续时间和瞬时时间的...

    java 8 的api

    5. **日期和时间API的改进**:`java.time`包取代了过时的`java.util.Date`和`Calendar`,提供了更易用、更强大的日期和时间处理功能,如`LocalDate`、`LocalTime`、`LocalDateTime`和`ZonedDateTime`。 6. **...

    官方版本-Java8-中文版-API(帮助你快速了解Java8新特性)

    6. **日期和时间API**:Java 8的`java.time`包替换掉了原有的`java.util.Date`和`Calendar`,提供了更加易用且功能丰富的日期和时间API,如`LocalDate`, `LocalTime`, `LocalDateTime`等。 7. **默认方法**:在接口...

    java8中文文档API

    Java 8对日期和时间API进行了彻底的改革,引入了`java.time`包,包含`LocalDate`, `LocalTime`, `LocalDateTime`等类,以及`ZonedDateTime`和`Duration`等,提供了更直观和强大的日期时间处理功能。 **8. Nashorn ...

    java8 API 文档

    5. **日期与时间API** Java 8引入了全新的`java.time`包,替换原有的`java.util.Date`和`java.util.Calendar`。新API包括`LocalDate`、`LocalTime`、`LocalDateTime`等类,提供了更易用且功能强大的日期和时间操作...

    java8 API 中文版

    6. **日期和时间API** Java 8引入了全新的`java.time`包,替代了过时的`java.util.Date`和`java.util.Calendar`。新API包括`LocalDate`、`LocalTime`、`LocalDateTime`等类,提供了更易用和更强大的日期和时间操作...

    Java8时间和日期API20例Java开发Java经验技

    Java 8 时间和日期 API 是一个重要的更新,它极大地改进了 Java 语言处理日期、时间以及时区的能力。在之前的版本中,Java 的日期处理功能相对复杂,常常导致代码难以理解和维护。Java 8 引入了全新的 `java.time` ...

    Java8API文档(官方离线版)

    Java 8还对日期和时间API进行了重写,引入了`java.time`包。旧的`java.util.Date`和`java.util.Calendar`被更直观、更易用的`LocalDate`、`LocalTime`、`LocalDateTime`等类取代。这些新类提供了更丰富的操作和格式...

    JAVA8API-官方文档下载-中文版

    5. **日期和时间API**: Java 8引入了`java.time`包,提供`LocalDate`、`LocalTime`、`LocalDateTime`等类,替代了原有的`java.util.Date`和`Calendar`,使日期和时间的操作更加直观。 **模块系统(Project Jigsaw)...

    java8 API文档

    5. **日期和时间API**:Java 8彻底改革了日期和时间处理,引入了java.time包,包含LocalDate、LocalTime、LocalDateTime、ZonedDateTime等类,提供更强大、更易用的日期和时间操作。 6. **默认方法**:在接口中添加...

    Java 8 API 中版chm手册

    4. **日期与时间API**:Java 8用新的`java.time`包取代了过时的`java.util.Date`和`java.util.Calendar`,提供了更直观、更易用的日期和时间API,如`LocalDate`、`LocalTime`和`LocalDateTime`。 5. **默认方法**:...

    Java8 API 文档.CHM

    5. **日期和时间API**:Java 8用`java.time`包取代了过时的`java.util.Date`和`Calendar`,提供了更直观和易用的日期、时间和时区处理。`LocalDate`, `LocalTime`, `LocalDateTime`, `ZonedDateTime`等类提供了丰富...

    Java8 英文文档 API .zip

    2. **日期与时间API**: - **java.time包**:取代了旧的`java.util.Date`和`java.util.Calendar`,提供了更直观、更易于使用的日期和时间类,如`LocalDate`, `LocalTime`, `LocalDateTime`和`ZonedDateTime`。 3. ...

    Java8 API.rar_JAVA8API_Java 8_java 8 api_java 8 api下载_java8

    日期和时间API的改进也是Java 8的一大革新。在Java 8之前,日期和时间的处理相对复杂,而新的java.time包提供了更加直观且强大的类,如LocalDate、LocalTime、LocalDateTime和ZonedDateTime,它们更好地支持了日期、...

    java8官方api帮助文档

    本文将深入探讨Java 8 API中的核心概念,主要关注以下几个方面:Lambda表达式、函数式接口、Stream API、日期与时间API、方法引用来帮助开发者更高效地利用Java 8的功能。 1. **Lambda表达式**: Java 8引入了...

    java8帮助文档中文版API

    4. **日期和时间API**:Java 8用`java.time`包替换了过时的`java.util.Date`和`java.util.Calendar`,提供了`LocalDate`, `LocalTime`, `LocalDateTime`, `ZonedDateTime`等新类,以及`Duration`和`Period`来处理...

    JAVA_API1.6文档(中文)

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

    java1.8-api

    5. **日期和时间API**:Java 8改进了日期和时间的处理,引入了`java.time`包,提供了`LocalDate`、`LocalTime`、`LocalDateTime`等类,替代了之前易用性较差的`java.util.Date`和`java.util.Calendar`。 6. **并发...

Global site tag (gtag.js) - Google Analytics