示例1:Java 8中获取今天的日期

Java 8 中的 LocalDate 用于表示当天日期。和java.util.Date不同,它只有日期,不包含时间。当你仅需要表示日期时就用这个类。

package com.shxt.demo02;import java.time.LocalDate;public class Demo01{public static void main(String[] args){LocalDate today = LocalDate.now();System.out.println("今天的日期:"+today);}}/*运行结果:今天的日期:2018-02-05*/

示例2:Java 8中获取年、月、日信息

package com.shxt.demo02;import java.time.LocalDate;public class Demo02 {public static void main(String[] args) {LocalDate today = LocalDate.now();int year = today.getYear();int month = today.getMonthValue();int day = today.getDayOfMonth();System.out.println("year:"+year);System.out.println("month:"+month);System.out.println("day:"+day);}}

示例3:Java 8中处理特定日期

package com.shxt.demo02;import java.time.LocalDate;public class Demo03{public static void main(String[] args){LocalDate date = LocalDate.of(2018,2,6);System.out.println("自定义日期:"+date);}}

我们通过静态工厂方法now()非常容易地创建了当天日期,你还可以调用另一个有用的工厂方法LocalDate.of()创建任意日期, 该方法需要传入年、月、日做参数,返回对应的LocalDate实例。这个方法的好处是没再犯老API的设计错误,比如年度起始于1900,月份是从0开 始等等。

示例4:Java 8中判断两个日期是否相等

package com.shxt.demo02;import java.time.LocalDate;public class Demo04 {public static void main(String[] args) {LocalDate date1 = LocalDate.now();LocalDate date2 = LocalDate.of(2018,2,5);if(date1.equals(date2)){System.out.println("时间相等");}else{System.out.println("时间不等");}}}

示例5:Java 8中检查像生日这种周期性事件

package com.shxt.demo02;import java.time.LocalDate;import java.time.MonthDay;public class Demo05 {public static void main(String[] args) {LocalDate date1 = LocalDate.now();LocalDate date2 = LocalDate.of(2018,2,6);MonthDay birthday = MonthDay.of(date2.getMonth(),date2.getDayOfMonth());MonthDay currentMonthDay = MonthDay.from(date1);if(currentMonthDay.equals(birthday)){System.out.println("是你的生日");}else{System.out.println("你的生日还没有到");}}}

只要当天的日期和生日匹配,无论是哪一年都会打印出祝贺信息。你可以把程序整合进系统时钟,看看生日时是否会受到提醒,或者写一个单元测试来检测代码是否运行正确。

示例6:Java 8中获取当前时间

package com.shxt.demo02;import java.time.LocalTime;public class Demo06{public static void main(String[] args){LocalTime time = LocalTime.now();System.out.println("获取当前的时间,不含有日期:"+time);}}

可以看到当前时间就只包含时间信息,没有日期。

示例7:Java 8中获取当前时间

通过增加小时、分、秒来计算将来的时间很常见。Java 8除了不变类型和线程安全的好处之外,还提供了更好的plusHours()方法替换add(),并且是兼容的。注意,这些方法返回一个全新的LocalTime实例,由于其不可变性,返回后一定要用变量赋值。

package com.shxt.demo02;import java.time.LocalTime;public class Demo07{public static void main(String[] args){LocalTime time = LocalTime.now();LocalTime newTime = time.plusHours(3);System.out.println("三个小时后的时间为:"+newTime);}}

示例8:Java 8如何计算一周后的日期

和上个例子计算3小时以后的时间类似,这个例子会计算一周后的日期。LocalDate日期不包含时间信息,它的plus()方法用来增加天、周、月,ChronoUnit类声明了这些时间单位。由于LocalDate也是不变类型,返回后一定要用变量赋值。

package com.shxt.demo02;import java.time.LocalDate;import java.time.temporal.ChronoUnit;public class Demo08{public static void main(String[] args) {LocalDate today = LocalDate.now();System.out.println("今天的日期为:"+today);LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);System.out.println("一周后的日期为:"+nextWeek);}}

可以看到新日期离当天日期是7天,也就是一周。你可以用同样的方法增加1个月、1年、1小时、1分钟甚至一个世纪,更多选项可以查看Java 8 API中的ChronoUnit类。

示例9:Java 8计算一年前或一年后的日期

利用minus()方法计算一年前的日期。

package com.shxt.demo02;import java.time.LocalDate;import java.time.temporal.ChronoUnit;public class Demo09{public static void main(String[] args) {LocalDate today = LocalDate.now();LocalDate previousYear = today.minus(1, ChronoUnit.YEARS);System.out.println("一年前的日期 : " + previousYear);LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);System.out.println("一年后的日期:"+nextYear);}}

示例10:Java 8的Clock时钟类

Java 8增加了一个Clock时钟类用于获取当时的时间戳,或当前时区下的日期时间信息。以前用到System.currentTimeInMillis()和TimeZone.getDefault()的地方都可用Clock替换。

package com.shxt.demo02;import java.time.Clock;public class Demo10 {public static void main(String[] args) {// Returns the current time based on your system clock and set to UTC.Clock clock = Clock.systemUTC();System.out.println("Clock : " + clock.millis());// Returns time based on system clock zoneClock defaultClock = Clock.systemDefaultZone();System.out.println("Clock : " + defaultClock.millis());}}

示例11:如何用Java判断日期是早于还是晚于另一个日期

另一个工作中常见的操作就是如何判断给定的一个日期是大于某天还是小于某天?在Java 8中,LocalDate类有两类方法isBefore()和isAfter()用于比较日期。

调用isBefore()方法时,如果给定日期小于当前日期则返回true。

package com.shxt.demo02;import java.time.LocalDate;import java.time.temporal.ChronoUnit;public class Demo11{public static void main(String[] args) {LocalDate today = LocalDate.now();LocalDate tomorrow = LocalDate.of(2018,2,6);if(tomorrow.isAfter(today)){System.out.println("之后的日期:"+tomorrow);}LocalDate yesterday = today.minus(1, ChronoUnit.DAYS);if(yesterday.isBefore(today)){System.out.println("之前的日期:"+yesterday);}}}

示例12:Java 8中处理时区

Java 8不仅分离了日期和时间,也把时区分离出来了。现在有一系列单独的类如ZoneId来处理特定时区,ZoneDateTime类来表示某时区下的时间。这在Java 8以前都是 GregorianCalendar类来做的。下面这个例子展示了如何把本时区的时间转换成另一个时区的时间。

package com.shxt.demo02;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.ZonedDateTime;public class Demo12{public static void main(String[] args) {// Date and time with timezone in Java 8ZoneId america = ZoneId.of("America/New_York");LocalDateTime localtDateAndTime = LocalDateTime.now();ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america );System.out.println("Current date and time in a particular timezone : " + dateAndTimeInNewYork);}}

示例13:如何表示信用卡到期这类固定日期,答案就在YearMonth

与 MonthDay检查重复事件的例子相似,YearMonth是另一个组合类,用于表示信用卡到期日、FD到期日、期货期权到期日等。还可以用这个类得到 当月共有多少天,YearMonth实例的lengthOfMonth()方法可以返回当月的天数,在判断2月有28天还是29天时非常有用。

package com.shxt.demo02;import java.time.*;public class Demo13 {public static void main(String[] args){YearMonth currentYearMonth = YearMonth.now();System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth());YearMonth creditCardExpiry = YearMonth.of(2019, Month.FEBRUARY);System.out.printf("Your credit card expires on %s %n", creditCardExpiry);}}

示例14:如何在Java 8中检查闰年

package com.shxt.demo02;import java.time.LocalDate;public class Demo14 {public static void main(String[] args) {LocalDate today = LocalDate.now();if(today.isLeapYear()){System.out.println("This year is Leap year");}else {System.out.println("2018 is not a Leap year");}}}

示例15:计算两个日期之间的天数和月数

有一个常见日期操作是计算两个日期之间的天数、周数或月数。在Java 8中可以用java.time.Period类来做计算。下面这个例子中,我们计算了当天和将来某一天之间的月数。

package com.shxt.demo02;import java.time.LocalDate;import java.time.Period;public class Demo15{public static void main(String[] args){LocalDate today = LocalDate.now();LocalDate java8Release = LocalDate.of(2018, 12, 14);Period periodToNextJavaRelease = Period.between(today, java8Release);System.out.println("Months left between today and Java 8 release : "+ periodToNextJavaRelease.getMonths() );}}

示例16:在Java 8中获取当前的时间戳

Instant类有一个静态工厂方法now()会返回当前的时间戳,如下所示:

package com.shxt.demo02;import java.time.Instant;public class Demo16{public static void main(String[] args){Instant timestamp = Instant.now();System.out.println("What is value of this instant " + timestamp.toEpochMilli());}}

时间戳信息里同时包含了日期和时间,这和java.util.Date很像。实际上Instant类确实等同于 Java 8之前的Date类,你可以使用Date类和Instant类各自的转换方法互相转换。

例如:Date.from(Instant) 将Instant转换成java.util.Date,Date.toInstant()则是将Date类转换成Instant类。

示例17:Java 8中如何使用预定义的格式化工具去解析或格式化日期

package com.shxt.demo02;import java.time.LocalDate;import java.time.format.DateTimeFormatter;public class Demo17{public static void main(String[] args){String dayAfterTommorrow = "20180205";LocalDate formatted = LocalDate.parse(dayAfterTommorrow,DateTimeFormatter.BASIC_ISO_DATE);System.out.println(dayAfterTommorrow+" 格式化后的日期为: "+formatted);}}

示例18:字符串互转日期类型

package com.shxt.demo02;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;public class Demo18{public static void main(String[] args) {LocalDateTime date = LocalDateTime.now();DateTimeFormatter format1 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");//日期转字符串String str = date.format(format1);System.out.println("日期转换为字符串:" + str);DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");//字符串转日期LocalDate date2 = LocalDate.parse(str, format2);System.out.println("日期类型:" + date2);}}

java8 clock_java8新的时间api相关推荐

  1. 高级JAVA开发必备技能:java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量)(JAVA 小虚竹)

    技术活,该赏 点赞再看,养成习惯 大家好,我是小虚竹.之前有粉丝私聊我,问能不能把JAVA8 新的日期时间API(JSR-310)知识点梳理出来.答案是肯定的,谁让我宠粉呢.由于内容偏多(超十万字了) ...

  2. JDK8新特性:新日期时间API全面学习

    旧版jdk对时间和日期的设计非常差 1.设计不合理 在java.util和Java.sql 包中都有日期类,java.util.Data同时包含日期和时间 而Java.sql.Date仅仅包含日期 此 ...

  3. 【Java8新特性】关于Java8中的日期时间API,你需要掌握这些!!

    写在前面 Java8之前的日期和时间API,存在一些问题,比如:线程安全的问题,跨年的问题等等.这些问题都在Hava8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大.立志 ...

  4. 静态方法:关于Java8中的日期时间API,你需要掌握这些!!

    Java8之前的日期和时间API,存在一些问题,比如:线程安全的问题,跨年的问题等等.这些问题都在Hava8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大.立志成为架构师 ...

  5. jsr303自定义验证_JSR 310新日期/时间API的自定义JSR 303 Bean验证约束

    jsr303自定义验证 借助JSR 310,Java 8终于为我们带来了不错的日期和时间API. 对于仍在使用Java 7的那些人(就像我目前在我的当前项目中一样),有很好的反向移植,请访问www.t ...

  6. JSR 310新日期/时间API的自定义JSR 303 Bean验证约束

    借助JSR 310,Java 8终于为我们带来了不错的日期和时间API. 对于仍在使用Java 7的那些人(例如我目前在我的当前项目中),有很好的反向移植,请访问www.threeten.org了解更 ...

  7. java 8 新特性 时间api使用实例

    2019独角兽企业重金招聘Python工程师标准>>> java 8 提供的 时间api java.time 比原来的Calendar 方便很多.主要提供了 日期类:LocalDat ...

  8. 【小家java】java8新特性之---全新的日期、时间API(JSR 310规范),附SpringMVC、Mybatis中使用JSR310的正确姿势

    [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小家java ...

  9. java8为什么用不了_为什么不建议使用Date,而是使用Java8新的时间和日期API?

    Java 8:新的时间和日期API 在Java 8之前,所有关于时间和日期的API都存在各种使用方面的缺陷,因此建议使用新的时间和日期API,分别从旧的时间和日期的API的缺点以及解决方法.Java ...

最新文章

  1. 基于jquery,bootstrap数据验证插件bootstrapValidator 教程
  2. 元素、属性、标题、段落、文本格式化
  3. android修改电量颜色,android状态栏电池颜色?
  4. 牛客网暑期ACM多校训练营(第三场)
  5. Java学习之数据库中的范式和反范式
  6. 必知必会 | 关于Redis缓存这三大问题,必知必会
  7. js显示PHP源代码命令,layedit富文本编辑器中如何添加显示源码功能(代码)
  8. 一次Mysql服务不断重启排查,原因竟然是它
  9. go lang go get There is no tracking information for the current branch.Please specify which
  10. 简单网络传递加密数据
  11. 批量删除新浪微博的博文
  12. 全国信息流广告优化师交流群,不容错过!赶紧加入!
  13. 机器周期、指令周期、时钟周期、总线周期
  14. jersey restful 测试_Jersey 开发RESTful(七)Jersey快速入门
  15. 现代软件工程 第一章 【概论】练习与讨论 第2题 邓杰
  16. 气球java游戏_气球游戏-2019腾讯笔试
  17. NLP学习笔记14-语言模型(下)
  18. runOnUiThread简单应用
  19. SAP-MM科目自动分配解析-(4-1)- 物料的配置影响
  20. 无线传感网络就业指导

热门文章

  1. Bailian2758 菲波那契数列(2)【递推】
  2. JSK-5 矩阵翻转【入门】
  3. HDU1716 排列2【全排列+输出格式】
  4. BP神经网络——从二次代价函数(Quadratic cost)到交叉熵(cross-entropy cost)代价函数
  5. 线性方程组的求解(C++)
  6. 负数的移位、有符号数的移位转换为无符号数的移位
  7. python Tricks —— list 镜像复制、list of lists 的 flat
  8. oracle log 分析程序,oracle之logminer日志分析
  9. php screw.so扩展下载,CentOS下安装php加解密工具php
  10. weblogic登录验证被拒绝_腾讯游戏:疑似未成年人登录和支付时需人脸识别验证...