日期的工具类

日期的工具类

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JDK8默认垃圾回收器详解[通俗易懂]

    JDK8默认垃圾回收器详解[通俗易懂]今天面试问道JDK8默认使用的垃圾收集器是什么,然后回来第一时间CMD命令查看了一下:java-XX:+PrintCommandLineFlags-version-XX:InitialHeapSize=266390080-XX:MaxHeapSize=4262241280-XX:+PrintCommandLineFlags-XX:+UseCompressedClassPointe…

    2022年10月11日
  • adb安装教程(详细)

    adb安装教程(详细)adb安装适用系统安装包安装教程适用系统windows安装包adb官网下载:https://developer.android.com/studio/releases/platform-tools.htm:百度网盘安装包地址:链接:https://pan.baidu.com/s/1FCCnZuL3LuRbyS-zOfUgDQ提取码:zvv5安装教程解压安装包(1)可将安装包解压到电脑的任一路径下(最好不是C盘)添加路径到环境变量下(1)添加的路径:打开adb文件夹,

  • SHFileOperation 文件夹COPY「建议收藏」

    SHFileOperation 文件夹COPY「建议收藏」/********************************************************函数名:CopyFolder函数功能:文件夹复制输入参数:lpszFromPath,lpszFromPath返回值:True说明:源目录必须以’\0\0′(即连续的两个’\0′)结束,不能以’\’结束*******************************

  • 写字板(Windows程序设计)

    写字板(Windows程序设计)前言c正编译生成debug,exe等文件,同样也可以通过exe"反编译"生成相对应的文件,一劳永逸,任君选择(`・ω・´)(~~我们老师为了给我们看要求效果给了

  • 微信h5支付,微信外浏览器支付实现

    微信h5支付,微信外浏览器支付实现2021-02-07修改看一下官方文档还是很必要的,知道必不可少的参数是什么:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_20&index=1下面按步骤跟着我做首先需要APPID,微信支付商户号mch_id,API密钥key,Appsecret(secret),说明在这里https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=3_1 然后设置支付域名,设置路径:商户平

  • django的render函数_Django Unchained

    django的render函数_Django Unchainedreverse函数reverse函数的作用是用来进行URL反转的,接下来我们介绍reverse函数的几种用法之前我们都是通过url来访问视图函数。有时候我们知道这个视图函数,但是想反转回他的url

发表回复

您的电子邮箱地址不会被公开。

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