日期的工具类

日期的工具类

1.日期工具

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

@Slf4j
public class DateUtil {

/**
* 根据指定的日期,类型,增加或减少数量
*
* @param date 日期
* @param calendarField 日历
* @param amount 数量
* @return date
*/
public static String add(Date date, int calendarField, int amount) {

SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
if (date == null) {

throw new IllegalArgumentException(“The date must not be null”);
}
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(calendarField, amount);
return dateFormat.format(c.getTime());
}

/**
* 根据指定的日期,增加或者减少天数
*
* @param date 日期
* @param amount 数量
* @return date
*/
public static String addDays(Date date, int amount) {

return add(date, Calendar.DAY_OF_MONTH, amount);
}

/**
* 获取两个日期之间的天数
*
* @param str_date1 开始日期
* @param str_date2 结束日期
* @return int
* @throws ParseException 转换数据类型异常
*/
public static int getDayLength(String str_date1, String str_date2) throws ParseException {

//1 将日期字符串转成日期对象。
//定义日期格式对象。
SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);

Date date1 = dateFormat.parse(str_date1);
Date date2 = dateFormat.parse(str_date2);

long time1 = date1.getTime();
long time2 = date2.getTime();

long time = Math.abs(time2 – time1);

int day = getDay(time);
return day;
}

private static int getDay(long time) {

int day = (int) (time / 1000 / 60 / 60 / 24);
return day;
}

/**
* 获取两个日期字符串之间的日期集合
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return list
*/
public static List<String> getBetweenDate(String startTime, String endTime) {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
//声明保存日期的集合
ArrayList<String> list = new ArrayList<>();
try {

//转化日期类型
Date startDate = sdf.parse(startTime);
Date endDate = sdf.parse(endTime);

//用Calendar 进行日期比较判断
Calendar calendar = Calendar.getInstance();
while (startDate.getTime() <= endDate.getTime()) {

//把日期添加到集合
list.add(sdf.format(startDate));
//设置日期
calendar.setTime(startDate);
//把日期增加一天
calendar.add(Calendar.DATE, 1);
//获取增加后的一天
startDate = calendar.getTime();
}
} catch (ParseException e) {

e.printStackTrace();
}
return list;
}

/**
* 获取时间差
*
* @param endDate 结束时间
* @param nowDate 起始时间
* @return
*/
public static String getDatePoor(Date endDate, Date nowDate) {

long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
long nm = 1000 * 60;
long ns = 1000;

// long ns = 1000;
// 获得两个时间的毫秒时间差异
long diff = endDate.getTime() – nowDate.getTime();

// 计算差多少天
long day = diff / nd;
if (day > 0) {

return day + “天前”;
}

// 计算差多少小时
long hour = diff % nd / nh;
if (hour > 0) {

return hour + “小时前”;
}

// 计算差多少分钟
long min = diff % nd % nh / nm;
if (min > 0) {

return min + “分钟前”;
}

// 计算差多少秒//输出结果
long sec = diff % nd % nh % nm / ns;
if (sec > 0) {

return sec + “秒前”;
}

return “刚刚”;

}

/**
* 获取定时表达式
*
* @param taskTime 指定定时时间
* @return 定时表达式
*/
public static String getCronEl(Date taskTime) {

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“MM-dd HH:mm:ss”);
String format = simpleDateFormat.format(taskTime);
format = format.replace(” “, “-“);
format = format.replaceAll(“:”, “-“);
String[] split = format.split(“-“);
CollectionUtils.reverseArray(split);
List<String> strings = new ArrayList<>();
strings.addAll(Arrays.asList(split));
strings.add(5, “?”);
String taskTimeEl = strings.stream().collect(Collectors.joining(” “));
return taskTimeEl;
}

/**
* 获取当前日期(格式:yyyy-MM-dd)
*
* @return 例:2019-03-15
*/
public static String getCurrentDate() {

Date currentDate = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
return simpleDateFormat.format(currentDate);
}

/**
* 获取当前日期戳
*
* @return 例:20190315
*/
public static String getCurrentDateStamp() {

Date currentDate = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
String format = simpleDateFormat.format(currentDate);
return format.replaceAll(“-“, “”);
}

/**
* 校验日期时间段不超过180天
*
* @param beginDate 开始时间
* @param endDate 结束时间
* @throws ParseException 异常
*/
public static void checkDayLength(String beginDate, String endDate) throws ParseException {

//获取系统当前时间
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone(“Asia/Shanghai”));
String format = simpleDateFormat.format(date);
date = simpleDateFormat.parse(format);
Date parseStart = simpleDateFormat.parse(beginDate);
log.info(“checkDayLength开始时间为parseStart{}”, parseStart);
Date parseEnd = simpleDateFormat.parse(endDate);
log.info(“checkDayLength结束时间为parseEnd:{}”, parseEnd);
//所选日期不能是今天之后的日期
if (!parseStart.before(date) || !parseEnd.before(date)) {

throw new ServiceException(StatisticalAnalysisEnum.DATE_FORMAT_IS_FALSE);
}
int dayLength = getDayLength(beginDate, endDate);
if (dayLength > 179) {

throw new ServiceException((StatisticalAnalysisEnum.DATE_MORE_EIGHTEEN));
}
}

}

 

2.日期字段在返回时设置格式的注解为:

@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss” ,timezone = “GMT+8”)

 

3.日期标识

M –>月

d –> 月份的天数

D –> 年份的天数

H –> 24小时制

h –> 12小时制

 

4.日期比较大小

1)Date1.after(Date2)

当date1大于date2时,返回true,当date1小于等于date2时,返回false;

2)Date1.before(Date2)

当date1小于date2时,返回true,当date1大于等于date2时,返回false;

 

5.时间戳与日期转换

日期 —-> 时间戳  unix_timestamp(‘2019-03-12’)

时间戳 —-> 日期 from_unixtime(2321312321)

 

6.mysql中日期按指定格式展示

date_format(字段名,‘%Y-%m-%d’)

转载于:https://www.cnblogs.com/studyByzh/p/dateUtils.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101040.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java链表数据结构是什么_java 链表数据结构

    java链表数据结构是什么_java 链表数据结构首先,单链表相对于队列的优势在于存储地址不是连续的,这样的意义在于,操作其中的某一个位置的元素时不需要对之前的其他元素都进行内存操作,大大的为我们的计算机减压了。下面直接进入正题:先要定义一个结点类,如下:Java代码publicclassNode{Nodenext;//下一个结点的引用Objectobj;//结点元素publicNode(Objectobj){this.obj=obj;…

    2022年5月27日
    32
  • 图解springmvc 执行流程

    图解springmvc 执行流程核心对象DispatcherServlet核心控制器负责请求,响应,数据的分发。HandlerMapping处理器映射器,负责到controller中,找到对应的方法,返回给核心控制器。HandleAdapter处理适配器,将handle找到的方法执行,执行结果,即ModelAndView数据和视图返回给核心控制器。HttpMessageConvertor消息转换器,数据类型的转换,如日期…ViewResolver视图解析器,核心控制器调度视图解析器,视图解析器,返回视图。核心控制

    2022年6月28日
    29
  • 安卓长按复制_Android长按弹出选项框

    安卓长按复制_Android长按弹出选项框android:textIsSelectable=”true”重点写在最前面,只用在textView中加入这个属性就可以满足长按复制了一。网上查了下有两中方式可以实现长按复制粘贴1)使用setTextIsSelectable()方法 代码中直接对TextView使用setTextIsSelectable()方法,将TextView设置成可点按选择的即可. TextViewtv=

    2022年9月26日
    4
  • jQuery操作table tr td

    jQuery操作table tr td

    2022年3月5日
    61
  • 网上的腾讯php面试题 (有答案版本)

    网上的腾讯php面试题 (有答案版本)

    2021年11月5日
    43
  • 在eclipse创建web项目的问题总结

    在eclipse创建web项目的问题总结eclipse 快捷键 1 alt shift r 可以查找在同一个类中相同的变量 2 ctrl shift r 可以搜索类名称一 关于 eclipse 创建 web 项目 servlet 不能初始化的问题同事用 tomcat 来管理自己写的一些应用程序 然后通过 sevlet 来初始化 由于对 web 开发好几个没写了 当初也没学好 所以当时我看到如下配置 只申明 servlet 没有 mapping 所

    2025年7月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号