原文:https://blog.csdn.net/qq_36596145/article/details/85331002

  1. import java.time.Instant;
  2. import java.time.LocalDate;
  3. import java.time.LocalDateTime;
  4. import java.time.LocalTime;
  5. import java.time.ZoneId;
  6. import java.time.ZonedDateTime;
  7. import java.time.format.DateTimeFormatter;
  8. import java.time.temporal.ChronoField;
  9. import java.util.Date;
  10.  
  11. /**
  12. * 基于Java8的时间工具类
  13. *
  14. * @author keji
  15. * @version $Id: DateUtil.java, v 0.1 2018-12-28 14:11 keji Exp $
  16. */
  17. public class DateUtil {
  18.  
  19. /**
  20. * 例如:2018-12-28
  21. */
  22. public static final String DATE = "yyyy-MM-dd";
  23. /**
  24. * 例如:2018-12-28 10:00:00
  25. */
  26. public static final String DATE_TIME = "yyyy-MM-dd HH:mm:ss";
  27. /**
  28. * 例如:10:00:00
  29. */
  30. public static final String TIME = "HHmmss";
  31. /**
  32. * 例如:10:00
  33. */
  34. public static final String TIME_WITHOUT_SECOND = "HH:mm";
  35.  
  36. /**
  37. * 例如:2018-12-28 10:00
  38. */
  39. public static final String DATE_TIME_WITHOUT_SECONDS = "yyyy-MM-dd HH:mm";
  40.  
  41. /**
  42. * 获取年
  43. *
  44. * @return 年
  45. */
  46. public static int getYear() {
  47. LocalTime localTime = LocalTime.now();
  48. return localTime.get(ChronoField.YEAR);
  49. }
  50.  
  51. /**
  52. * 获取月份
  53. *
  54. * @return 月份
  55. */
  56. public static int getMonth() {
  57. LocalTime localTime = LocalTime.now();
  58. return localTime.get(ChronoField.MONTH_OF_YEAR);
  59. }
  60.  
  61. /**
  62. * 获取某月的第几天
  63. *
  64. * @return 几号
  65. */
  66. public static int getMonthOfDay() {
  67. LocalTime localTime = LocalTime.now();
  68. return localTime.get(ChronoField.DAY_OF_MONTH);
  69. }
  70.  
  71. /**
  72. * 格式化日期为字符串
  73. *
  74. * @param date date
  75. * @param pattern 格式
  76. * @return 日期字符串
  77. */
  78. public static String format(Date date,String pattern){
  79.  
  80. Instant instant = date.toInstant();
  81.  
  82. LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
  83.  
  84. return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
  85. }
  86.  
  87. /**
  88. * 解析字符串日期为Date
  89. *
  90. * @param dateStr 日期字符串
  91. * @param pattern 格式
  92. * @return Date
  93. */
  94. public static Date parse(String dateStr, String pattern) {
  95.  
  96. LocalDateTime localDateTime = LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
  97. Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
  98. return Date.from(instant);
  99. }
  100.  
  101. /**
  102. * 为Date增加分钟,减传负数
  103. *
  104. * @param date 日期
  105. * @param plusMinutes 要增加的分钟数
  106. * @return 新的日期
  107. */
  108. public static Date addMinutes(Date date, Long plusMinutes) {
  109. LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
  110. LocalDateTime newDateTime = dateTime.plusMinutes(plusMinutes);
  111. return Date.from(newDateTime.atZone(ZoneId.systemDefault()).toInstant());
  112. }
  113.  
  114. /**
  115. * 增加时间
  116. *
  117. * @param date date
  118. * @param hour 要增加的小时数
  119. * @return new date
  120. */
  121. public static Date addHour(Date date, Long hour) {
  122. LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
  123. LocalDateTime localDateTime = dateTime.plusHours(hour);
  124. return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
  125. }
  126.  
  127. /**
  128. * @return 返回当天的起始时间
  129. */
  130. public static Date getStartTime() {
  131.  
  132. LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0);
  133. return localDateTime2Date(now);
  134. }
  135.  
  136. /**
  137. * @return 返回当天的结束时间
  138. */
  139. public static Date getEndTime() {
  140. LocalDateTime now = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).withNano(999);
  141. return localDateTime2Date(now);
  142. }
  143.  
  144. /**
  145. * 减月份
  146. *
  147. * @param monthsToSubtract 月份
  148. * @return Date
  149. */
  150. public static Date minusMonths(long monthsToSubtract){
  151. LocalDate localDate = LocalDate.now().minusMonths(monthsToSubtract);
  152.  
  153. return localDate2Date(localDate);
  154. }
  155.  
  156. /**
  157. * LocalDate类型转为Date
  158. *
  159. * @param localDate LocalDate object
  160. * @return Date object
  161. */
  162. public static Date localDate2Date(LocalDate localDate) {
  163.  
  164. ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault());
  165.  
  166. return Date.from(zonedDateTime.toInstant());
  167. }
  168.  
  169. /**
  170. * LocalDateTime类型转为Date
  171. *
  172. * @param localDateTime LocalDateTime object
  173. * @return Date object
  174. */
  175. public static Date localDateTime2Date(LocalDateTime localDateTime) {
  176. return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
  177. }
  178.  
  179. /**
  180. * 查询当前年的第一天
  181. *
  182. * @param pattern 格式,默认格式yyyyMMdd
  183. * @return 20190101
  184. */
  185. public static String getFirstDayOfCurrentYear(String pattern) {
  186. LocalDateTime localDateTime = LocalDateTime.now().withMonth(1).withDayOfMonth(1);
  187.  
  188. if (StringUtils.isEmpty(pattern)) {
  189. pattern = "yyyyMMdd";
  190. }
  191.  
  192. return format(localDateTime2Date(localDateTime), pattern);
  193. }
  194.  
  195. /**
  196. * 查询前一年最后一个月第一天
  197. *
  198. * @param pattern 格式,默认格式yyyyMMdd
  199. * @return 20190101
  200. */
  201. public static String getLastMonthFirstDayOfPreviousYear(String pattern) {
  202. LocalDateTime localDateTime = LocalDateTime.now().minusYears(1L).withMonth(12).withDayOfMonth(1);
  203.  
  204. if (StringUtils.isEmpty(pattern)) {
  205. pattern = "yyyyMMdd";
  206. }
  207.  
  208. return format(localDateTime2Date(localDateTime), pattern);
  209. }
  210.  
  211. /**
  212. * 查询前一年最后一个月第一天
  213. *
  214. * @param pattern 格式,默认格式yyyyMMdd
  215. * @return 20190101
  216. */
  217. public static String getLastMonthLastDayOfPreviousYear(String pattern) {
  218. LocalDateTime localDateTime = LocalDateTime.now().minusYears(1L).with(TemporalAdjusters.lastDayOfYear());
  219.  
  220. if (StringUtils.isEmpty(pattern)) {
  221. pattern = "yyyyMMdd";
  222. }
  223.  
  224. return format(localDateTime2Date(localDateTime), pattern);
  225. }
  226.  
  227. /**
  228. * 获取当前日期
  229. *
  230. * @param pattern 格式,默认格式yyyyMMdd
  231. * @return 20190101
  232. */
  233. public static String getCurrentDay(String pattern) {
  234. LocalDateTime localDateTime = LocalDateTime.now();
  235.  
  236. if (StringUtils.isEmpty(pattern)) {
  237. pattern = "yyyyMMdd";
  238. }
  239.  
  240. return format(localDateTime2Date(localDateTime), pattern);
  241. }
  242. }

基于Java8的日期时间工具类DateTimeFormatter的更多相关文章

  1. Apache Commons Lang之日期时间工具类

    码农不识Apache,码尽一生也枉然. FastDateFormat FastDateFormat是一个快速且线程安全的时间操作类,它完全可以替代SimpleDateFromat.因为是线程安全的,所 ...

  2. java基础之日期时间工具类

    package zy.test; import java.sql.Timestamp; import java.text.ParseException; import java.text.ParseP ...

  3. java8时间类API安全问题(赠送新的时间工具类哟)

    LocalDateTime等新出的日期类全是final修饰的类,不能被继承,且对应的日期变量都是final修饰的,也就是不可变类.赋值一次后就不可变,不存在多线程数据问题. simpleDateFor ...

  4. 【Hutool】Hutool工具类之日期时间工具——DateUtil

    一.用于取代Date对象的DateTime对象 再也不用Date SimpleDateFormat Calendar之间倒腾来倒腾去了!日期创建-获取-操作一步到位! 如果JDK版本更新到了8及以上, ...

  5. 【Hutool】工具类之日期时间工具-DateUtil

    日期时间工具类 一.依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-al ...

  6. Java8 ,LocalDate,LocalDateTime处理日期和时间工具类,

    Java8 ,LocalDate,LocalDateTime处理日期和时间工具类 1.获取今天的日期 2.在Java 8 中获取年.月.日信息 3.在Java 8 中处理特定日期 4.在Java 8 ...

  7. 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...

  8. Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate

    通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...

  9. Java日期时间API系列21-----Jdk8中java.time包中的新的日期时间API类,xk-time时间转换,计算,格式化,解析的工具

    通过工作之余,对Java8中java.time包源码的不断学习,使用和总结,开发了xk-time,初步完成,欢迎试用和提出建议! xk-time xk-time is a datetime conve ...

随机推荐

  1. C#中 [], List, Array, ArrayList 區別

    [] 是針對特定類型.固定長度的.List 是針對特定類型.任意長度的.Array 是針對任意類型.固定長度的.ArrayList 是針對任意類型.任意長度的.Array 和 ArrayList 是通 ...

  2. Visual Studio Code + Docker

    前言 VS Code是一个年轻的编辑器,但是确实是非常犀利.通过本篇,老司机带你使用VS Code玩转Docker——相信阅读本篇之后,无论是初学者还是老手,都可以非常方便的玩转Docker了!所谓是 ...

  3. 云开发 :云原生(Cloud Native)

    云开发 :云原生(Cloud Native) 云原生 所谓云原生,它不是一个产品,而是一套技术体系和一套方法论,用于构建和运行充分利用云计算模型优势的应用.云计算将提供无限制的按需计算能力和根据使用情 ...

  4. python解包

    概念 python的解包可以这样来理解:把元素给拆分并把其赋值给自己所需要的变量,因此元素应该是一个可迭代对象. 形式 简单版本 下面展示的是解包的基本形式,根据长度赋值给对应多的变量. name_l ...

  5. 【QT开发】信号转发器QSignalMapper的使用

    QSignalMapper我们可以将它理解为一个信号翻译器或者说是哥信号转发器.它的主要应用在于可以实现一个函数相应不同按钮的实现功能.比如我们 实现一个计算器的时候,很多不同的按钮都有着差不多的功能 ...

  6. pycharm远程调试或运行代码

    第一步:开始 第二步:设置远程服务器 第三步,查看 第四步,选择解释器,和指定文件映射路径(相对上一步指定的相对路径)

  7. python学习-57 logging模块

    logging 1.basicConfig方式 import logging # 以下是日志的级别 logging.debug('debug message') logging.info('info ...

  8. golang之方法

    golang中的方法是作用在指定的数据类型上的(即:和指定 数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是在struct. 方法的使用: type Person struct { Num i ...

  9. PAT甲级题分类汇编——树

    本文为PAT甲级分类汇编系列文章. AVL树好难!(其实还好啦~) 我本来想着今天应该做不完树了,没想到电脑里有一份讲义,PPT和源代码都有,就一遍复习一遍抄码了一遍,更没想到的是编译一遍通过,再没想 ...

  10. sequence(线段树+单调栈) (2019牛客暑期多校训练营(第四场))

    示例: 输入: 31 -1 11 2 3 输出: 3 题意:求最大的(a区间最小值*b区间和) 线段树做法:用单调栈求出每个数两边比b数组大的左右边界,然后用线段树求出每段区间的和sum.最小前缀ls ...