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

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.util.Date; /**
* 基于Java8的时间工具类
*
* @author keji
* @version $Id: DateUtil.java, v 0.1 2018-12-28 14:11 keji Exp $
*/
public class DateUtil { /**
* 例如:2018-12-28
*/
public static final String DATE = "yyyy-MM-dd";
/**
* 例如:2018-12-28 10:00:00
*/
public static final String DATE_TIME = "yyyy-MM-dd HH:mm:ss";
/**
* 例如:10:00:00
*/
public static final String TIME = "HHmmss";
/**
* 例如:10:00
*/
public static final String TIME_WITHOUT_SECOND = "HH:mm"; /**
* 例如:2018-12-28 10:00
*/
public static final String DATE_TIME_WITHOUT_SECONDS = "yyyy-MM-dd HH:mm"; /**
* 获取年
*
* @return 年
*/
public static int getYear() {
LocalTime localTime = LocalTime.now();
return localTime.get(ChronoField.YEAR);
} /**
* 获取月份
*
* @return 月份
*/
public static int getMonth() {
LocalTime localTime = LocalTime.now();
return localTime.get(ChronoField.MONTH_OF_YEAR);
} /**
* 获取某月的第几天
*
* @return 几号
*/
public static int getMonthOfDay() {
LocalTime localTime = LocalTime.now();
return localTime.get(ChronoField.DAY_OF_MONTH);
} /**
* 格式化日期为字符串
*
* @param date date
* @param pattern 格式
* @return 日期字符串
*/
public static String format(Date date,String pattern){ Instant instant = date.toInstant(); LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); return localDateTime.format(DateTimeFormatter.ofPattern(pattern));
} /**
* 解析字符串日期为Date
*
* @param dateStr 日期字符串
* @param pattern 格式
* @return Date
*/
public static Date parse(String dateStr, String pattern) { LocalDateTime localDateTime = LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(pattern));
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
return Date.from(instant);
} /**
* 为Date增加分钟,减传负数
*
* @param date 日期
* @param plusMinutes 要增加的分钟数
* @return 新的日期
*/
public static Date addMinutes(Date date, Long plusMinutes) {
LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
LocalDateTime newDateTime = dateTime.plusMinutes(plusMinutes);
return Date.from(newDateTime.atZone(ZoneId.systemDefault()).toInstant());
} /**
* 增加时间
*
* @param date date
* @param hour 要增加的小时数
* @return new date
*/
public static Date addHour(Date date, Long hour) {
LocalDateTime dateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
LocalDateTime localDateTime = dateTime.plusHours(hour);
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
} /**
* @return 返回当天的起始时间
*/
public static Date getStartTime() { LocalDateTime now = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0);
return localDateTime2Date(now);
} /**
* @return 返回当天的结束时间
*/
public static Date getEndTime() {
LocalDateTime now = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).withNano(999);
return localDateTime2Date(now);
} /**
* 减月份
*
* @param monthsToSubtract 月份
* @return Date
*/
public static Date minusMonths(long monthsToSubtract){
LocalDate localDate = LocalDate.now().minusMonths(monthsToSubtract); return localDate2Date(localDate);
} /**
* LocalDate类型转为Date
*
* @param localDate LocalDate object
* @return Date object
*/
public static Date localDate2Date(LocalDate localDate) { ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.systemDefault()); return Date.from(zonedDateTime.toInstant());
} /**
* LocalDateTime类型转为Date
*
* @param localDateTime LocalDateTime object
* @return Date object
*/
public static Date localDateTime2Date(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
} /**
* 查询当前年的第一天
*
* @param pattern 格式,默认格式yyyyMMdd
* @return 20190101
*/
public static String getFirstDayOfCurrentYear(String pattern) {
LocalDateTime localDateTime = LocalDateTime.now().withMonth(1).withDayOfMonth(1); if (StringUtils.isEmpty(pattern)) {
pattern = "yyyyMMdd";
} return format(localDateTime2Date(localDateTime), pattern);
} /**
* 查询前一年最后一个月第一天
*
* @param pattern 格式,默认格式yyyyMMdd
* @return 20190101
*/
public static String getLastMonthFirstDayOfPreviousYear(String pattern) {
LocalDateTime localDateTime = LocalDateTime.now().minusYears(1L).withMonth(12).withDayOfMonth(1); if (StringUtils.isEmpty(pattern)) {
pattern = "yyyyMMdd";
} return format(localDateTime2Date(localDateTime), pattern);
} /**
* 查询前一年最后一个月第一天
*
* @param pattern 格式,默认格式yyyyMMdd
* @return 20190101
*/
public static String getLastMonthLastDayOfPreviousYear(String pattern) {
LocalDateTime localDateTime = LocalDateTime.now().minusYears(1L).with(TemporalAdjusters.lastDayOfYear()); if (StringUtils.isEmpty(pattern)) {
pattern = "yyyyMMdd";
} return format(localDateTime2Date(localDateTime), pattern);
} /**
* 获取当前日期
*
* @param pattern 格式,默认格式yyyyMMdd
* @return 20190101
*/
public static String getCurrentDay(String pattern) {
LocalDateTime localDateTime = LocalDateTime.now(); if (StringUtils.isEmpty(pattern)) {
pattern = "yyyyMMdd";
} return format(localDateTime2Date(localDateTime), pattern);
}
}

基于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. SET IDENTITY_INSERT的用法,具体去体验一下

    如果将值插入到表的标识列中,需要启用 SET IDENTITY_INSERT. 举例如下: 创建表Orders.Products,Orders表与Products表分别有标识列OrderID与Prod ...

  2. 04点睛Spring4.1-资源调用

    转发:https://www.iteye.com/blog/wiselyman-2210666 4.1 Resource spring用来调用外部资源数据的方式 支持调用文件或者是网址 在系统中调用p ...

  3. 安装 KVM

    安装 KVM 需要的包 sudo apt-get install -y qemu-kvm qemu-system libvirt-bin virt-manager bridge-utils vlan ...

  4. 【计算机视觉】基于局部二值相似性模式(LBSP)的运动目标检测算法

    基于局部二值相似性模式(LBSP)的运动目标检测算法 kezunhai@gmail.com http://blog.csdn.net/kezunhai 本文根据论文:Improving backgro ...

  5. k8s nfs

    1 yum install -y nfs-utils-* 2 mkdir /home/data 3 vim /etc/exports /home/data 10.0.0.0/24(rw,async,n ...

  6. TCP/IP学习笔记9--以太网之基本概念1: 分类,连接方式

    时间是变化的财富.时钟模仿它,却只有变化而无财富. -- 泰戈尔 以太网(Ethernet)一词源于Ether(以太), 是介质的意思.在爱因斯坦哥们提出量子力学之前,人们普遍认为宇宙空间充满以太,并 ...

  7. 2018ACM-ICPC亚洲区域赛南京站I题Magic Potion(网络流)

    http://codeforces.com/gym/101981/attachments 题意:有n个英雄,m个敌人,k瓶药剂,给出每个英雄可以消灭的敌人的编号.每个英雄只能消灭一个敌人,但每个英雄只 ...

  8. Shell之监控cpu、内存、磁盘脚本

    #!/bin/bash #获取内存情况 mem_total=`free | awk 'NR==2{print $2}'` #获取内存总大小 mem_use=`free | awk 'NR==2{pri ...

  9. 02 File类的方法练习——遍历文件夹

    思路 需要遍历的文件夹 File 使用listFile列出下级文件及文件夹 判断得到的list是否为空,为空则输出当前文件夹名称 如果不为空,逐个判断是文件还是文件夹 如果是文件,输出文件名 如果是文 ...

  10. WUSTOJ 1326: Graph(Java)费马数

    题目链接:1326: Graph 参考博客:HNUSTOJ-1617 Graph(费马数)--G2MI Description Your task is to judge whether a regu ...