TIME

  • Java 8 推出了全新的日期时间API并且已经很久了,因为业务中遇到的时间处理的还是不多,因此用的也少,而且大多是用封装好的时间共计包,就更少接触java8 的时间类型API了,因此对他不是很熟,今天遇到了一下问题打算总结一下:
  • Java处理日期、日历和时间的不足之处:将 java.util.Date 设定为可变类型,以及 SimpleDateFormat 的非线程安全使其应用非常受限。然后就在 java8 上面增加新的特性。
  • 全新API的好处之一就是,明确了日期时间概念,例如:瞬时(instant)、 长短(duration)、日期、时间、时区和周期这些概念都是分开的,并且有独立的对象来处理。
  • 重要的是:同时继承了Joda 库按人类语言和计算机各自解析的时间处理方式。不同于老版本,新API基于ISO标准日历系统,java.time包下的***所有类都是不可变类型而且线程安全***。

关键类

  • Instant:瞬时实例。
  • LocalTime:本地时间,不包含日期。只有时分秒纳秒等信息
  • LocalDate:本地日期,不包含具体时间 例如:2014-01-14 可以用来记录生日、纪念日、加盟日等。只有年月日信息
  • LocalDateTime:组合了日期和时间,但不包含时差和时区信息。包含所有年月日时分秒纳秒等信息
  • 以上三个是类似的PAI,都有差不多一样的方法和处理方式,只是表达的时间范围是不一样的。这一点用起来还是非常方便的
  • ZonedDateTime:最完整的日期时间,包含时区和相对UTC或格林威治的时差。这个类用来处理带时区的时间信息
  • 新API还引入了 ZoneOffSet 和 ZoneId 类,使得解决时区问题更为简便。解析、格式化时间的 DateTimeFormatter 类也全部重新设计。具体时区用这两个处理

当前时间

/*** java时间类型,新旧api对比*/public static void getCurrentDate() {LocalDate today = LocalDate.now();System.out.println("today's local date: " + today);Date date = new Date();System.out.println("today's date is: " + date);}

获取对应时间年月日,时分秒

/*** LocalDate 获取年月日信息,与之前Calendar对比*/public static void getDetailDate() {LocalTime todayTime = LocalTime.now();int second = todayTime.getSecond();int minute = todayTime.getMinute();int hour = todayTime.getHour();int nano = todayTime.getNano();System.out.println("秒: " + second + "分: " + minute + "时: " + hour + "纳秒: " + nano);LocalDate today = LocalDate.now();int year = today.getYear();int month = today.getMonthValue();int day = today.getDayOfMonth();int day_year = today.getDayOfYear();System.out.println(year + ": " + month + ": " + day + ": " + day_year);LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDateTime.getHour());}

处理特定日志 & 时间对比

 /*** 处理特定日志 & 时间对比*/public static void handleSpecilDate() {LocalDate localDate = LocalDate.of(2021, 11, 18);System.out.println(localDate);LocalDate date = LocalDate.of(2021, 6, 18);System.out.println(localDate.equals(date));}

处理生日这种周期性时间

/*** 检查生日这种周期性时间*/public static void cycleDate() {LocalDate localDate = LocalDate.now();LocalDate dateofBirth = LocalDate.of(2021, 6, 18);MonthDay birthday = MonthDay.of(dateofBirth.getMonth(), dateofBirth.getDayOfMonth());MonthDay nowDate = MonthDay.from(localDate);MonthDay monthParse = MonthDay.parse("2021-06-18", DateTimeFormatter.ofPattern("yyyy-MM-dd"));System.out.println(birthday.equals(nowDate));System.out.println(monthParse);}

yearMonth处理固定日期

 public static void checkCardExpiry() {YearMonth currenctYearMonth = YearMonth.now();System.out.println(currenctYearMonth + ": " + currenctYearMonth.lengthOfMonth());YearMonth credtCard = YearMonth.of(2021, Month.FEBRUARY);System.out.println(credtCard + ": " + credtCard.lengthOfMonth());DayOfWeek dayOfWeek = DayOfWeek.of(3);System.out.println(dayOfWeek);}

时间做加法

 /*** 时间做加法* LocalTime支持:* NANOS* MICROS* MILLIS* SECONDS* MINUTES* HOURS* HALF_DAYS*/public static void plusHours() {LocalTime localTime = LocalTime.now();localTime.plusHours(5);System.out.println(localTime);LocalTime nextWeek = localTime.plus(10, ChronoUnit.HOURS);System.out.println(nextWeek);System.out.println(localTime);LocalTime halfDay = localTime.plus(2, ChronoUnit.HALF_DAYS);System.out.println(halfDay);}/*** 日期做加法*/public static void plusDate() {LocalDate localDate = LocalDate.now();LocalDate tomorrow = localDate.plus(1, ChronoUnit.DAYS);System.out.println(tomorrow);LocalDate nextYear = localDate.plus(1, ChronoUnit.YEARS);LocalDate beforeYear = localDate.minus(1, ChronoUnit.YEARS);System.out.println("nextYear: " + nextYear);System.out.println("beforeYear: " + beforeYear);}/*** 日期+ 时间,*/public static void plusTime() {LocalDateTime localDateTime = LocalDateTime.now();System.out.println(localDateTime);LocalDateTime afterHour = localDateTime.plus(1, ChronoUnit.HOURS).plus(1, ChronoUnit.MINUTES).plus(1, ChronoUnit.YEARS);System.out.println(afterHour);LocalDateTime nowDate = LocalDateTime.of(2021, 6, 19, 17, 23, 57);System.out.println(nowDate);}

时间比较

  /*** 时间比较api*/public static void checkTimes() {LocalDateTime localDateTime = LocalDateTime.now();LocalDateTime afterDate = LocalDateTime.of(2021, 6, 19, 17, 23, 57);System.out.println(localDateTime.isBefore(afterDate));System.out.println(localDateTime.isAfter(afterDate));}

时区处理

   /*** 时区处理*/public static void zoneTime() {ZoneId america = ZoneId.of("America/Chicago");LocalDateTime dateAndTime = LocalDateTime.now();ZonedDateTime dateTimeInChicago = ZonedDateTime.of(dateAndTime, america);System.out.println(dateTimeInChicago);ZonedDateTime dateTimeInShenZhen = ZonedDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());System.out.println(dateTimeInShenZhen);}/*** 包括时差信息的日期与时间*/public static void zoneOffSet() {LocalDateTime localDateTime = LocalDateTime.of(2021, Month.FEBRUARY, 14, 19, 24);ZoneOffset offset = ZoneOffset.of("+07:30");OffsetDateTime dateTime = OffsetDateTime.of(localDateTime, offset);System.out.println(dateTime);}

检查闰年

/*** 检查闰年*/
public static void isLeapYear() {LocalDate today = LocalDate.now();System.out.println(today.getYear() + "年是闰年:" + today.isLeapYear());}

计算日期间隔

*** 计算日期之间年,月,天数*/public static void calcDate() {LocalDate localDateTime = LocalDate.of(2021, 10, 28);LocalDate beforeDateTime = LocalDate.now().plus(3, ChronoUnit.DAYS);Period period = Period.between(localDateTime, beforeDateTime);System.out.println("year: " + period.getYears() + " month:" + period.getMonths() + " day:" + period.getDays());}

日期格式

/*** 格式化日期*/public static void formatDate() {String dayAfterTomorrow = "2021-06-18 15:53:06";DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime formatDateTime = LocalDateTime.parse(dayAfterTomorrow, df);System.out.println("timeStr: " + dayAfterTomorrow + " dateTime:" + formatDateTime);String dayDate = "20210618";DateTimeFormatter dateDayFor = DateTimeFormatter.ofPattern("yyyyMMdd");LocalDate localDate = LocalDate.parse(dayDate, dateDayFor);System.out.println("timeStr: " + dayDate + " dateTime:" + localDate);String dayTime = "160451";DateTimeFormatter dayTimeFor = DateTimeFormatter.ofPattern("HHmmss");LocalTime localTime = LocalTime.parse(dayTime, dayTimeFor);System.out.println("timeStr: " + dayTime + " dateTime:" + localTime);}

死磕 Java 8 的日期处理相关推荐

  1. 日本Java18_死磕18个Java8日期处理,工作必用!

    原标题:死磕18个Java8日期处理,工作必用! 链接:http://suo.im/5RJhaU Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API. J ...

  2. 死磕 java集合之ArrayDeque源码分析

    问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安全的吗? (4)ArrayDeque是有界的吗? 简介 双端队列是一种特殊的队列,它的 ...

  3. 死磕 java同步系列之ReentrantReadWriteLock源码解析

    问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的 ...

  4. 死磕Java并发:分析 ArrayBlockingQueue 构造函数加锁问题

    作者: chenssy 来源:Java技术驿站 昨天有位小伙伴问我一个 ArrayBlockingQueue 中的一个构造函数为何需要加锁,其实这个问题我还真没有注意过.主要是在看 ArrayBloc ...

  5. 死磕Java并:J.U.C之ConcurrentHashMap红黑树转换分析

    作者:chessy 来源:Java技术驿站 在[死磕Java并发]-----J.U.C之Java并发容器:ConcurrentHashMap一文中详细阐述了ConcurrentHashMap的实现过程 ...

  6. 死磕Java并发:J.U.C之阻塞队列:ArrayBlockingQueue

    作者:chenssy 来源:Java技术驿站 ArrayBlockingQueue,一个由数组实现的有界阻塞队列.该队列采用FIFO的原则对元素进行排序添加的. ArrayBlockingQueue为 ...

  7. 死磕Java并发:J.U.C之Java并发容器:ConcurrentLinkedQueue

    作者:chenssy 来源:Java技术驿站 要实现一个线程安全的队列有两种方式:阻塞和非阻塞.阻塞队列无非就是锁的应用,而非阻塞则是CAS算法的应用.下面我们就开始一个非阻塞算法的研究:Coucur ...

  8. 死磕Java并发:J.U.C之并发工具类:Exchanger

    作者:chenssy 来源:Java技术驿站 前面三篇博客分别介绍了CyclicBarrier.CountDownLatch.Semaphore,现在介绍并发工具类中的最后一个Exchange.Exc ...

  9. 死磕Java并发:J.U.C之并发工具类:CountDownLatch

    作者:chenssy 来源:Java技术驿站 在上篇博客中介绍了Java四大并发工具一直的CyclicBarrier,今天要介绍的CountDownLatch与CyclicBarrier有点儿相似. ...

最新文章

  1. 程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理 - by Glede
  2. nor flash 基础篇
  3. 华为电脑c语言总是错误,关于华为机试题求代码!解决方法
  4. PHP应对洪水般的恶意访问接口 访问冲击
  5. 把SAP Analytics Cloud嵌入到SAP Cloud for Customer系统里
  6. Sharepoint页面里添加.net托管代码
  7. 【图像处理】中的“滤镜算法”:灰度、黑白、反向、去色、单色、高斯模糊、怀旧、连环画
  8. python画曲线图-python怎么画曲线图
  9. xilinx sdk串口打印helloworld如何打开SDK terminal查看
  10. android 界面布局
  11. 《Redis开发与运维》学习第四章
  12. mac top内存 cpu
  13. 推荐top10的免费下载破解软件的网站
  14. 文件服务器和nas区别,nas和ftp服务器的区别
  15. HDU6578——blank 动态规划
  16. 可视化BI模板分享:运营相关模板,知乎已获千赞
  17. 盖世汽车 2021中国汽车智能座舱与用户体验大会视频
  18. C++中标准模板库STL基本概念
  19. c#中csc命令的用法
  20. python选择、冒泡、插入排序

热门文章

  1. C语言之去掉https链接的默认443端口
  2. 字符串之将整数字符串转成整数值
  3. Android插件化开发之AMS与应用程序(客户端ActivityThread、Instrumentation、Activity)通信模型分析
  4. Linux之VI命令详解
  5. 衡量计算机浮点数操作性能,计算机系统基础:计算机性能评价知识笔记
  6. 世界上最奇异的10种树,你都见过吗?
  7. 与毒”共舞30年!清华美女研究生为何放弃高薪,选择特招入伍?背后的原因令人泪崩......
  8. 围棋天才柯洁怒怼央视国际记者,用实力斩获清华大学免试资格
  9. angular的html引入js,在AngularJS中的文件夹中加载JavaScript和CSS文件
  10. phpstormp新建PHP保存在哪里_记一次windows配置PHP环境