日期的工具类

日期的工具类

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中Scanner的用法:单行/多行输入

    Java中Scanner的用法:单行/多行输入Java的Scanner用法,主要用于算法笔试时的控制台输入问题:解决这种情况下的Scanner输入:单行,多行,数值,字符串最好解决的情况单行输入多个字符串多行输入多个字符串问题:解决这种情况下的Scanner输入:单行,多行,数值,字符串平时写程序一般不用Scanner,线上笔试的时候,各大公司热衷于Scanner输入。平时用LeetCode刷题也不会用到,结果多次在笔试时候卡在Scan……

    2022年7月20日
    86
  • Java工程师自我评价(软件工程师自我评价)

    JAVA工程师简历自我评价无论在学习、工作或是生活中,我们都可能会使用到自我评价,自我评价具有重要的社会功能,它极大地影响人与人之间的交往方式。那要怎么写好自我评价呢?以下是小编收集整理的JAVA工程师简历自我评价,仅供参考,希望能够帮助到大家。JAVA工程师简历自我评价11、有较强的分析、解决问题的能力,具有较强逻辑思维能力和表达能力。2、性格开朗,积极乐观,能以极大的’热情投入工作。3、具…

    2022年4月15日
    47
  • DirectX修复工具(DirectX Repair)修复工具V4.0增强版「建议收藏」

    DirectX修复工具(DirectXRepair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复。程序主要针对0xc000007b问题设计,可以完美修复该问题。本程序中包含了最新版的DirectXredist(Jun2010),并且全部DX文件都有Microsoft的数字签名,安全放心。本程序为了应对一般电脑用户的使用,采用了易用的一键式设计,只要点击主界面上的“检测并修复”按钮,程序就会自动完成校

    2022年4月13日
    124
  • 使用openssl生成证书_怎样验证普通话证书的真假

    使用openssl生成证书_怎样验证普通话证书的真假翻译:https://raymii.org/s/articles/OpenSSL_Manually_Verify_a_certificate_against_an_OCSP.html?utm_sour

    2022年8月3日
    5
  • Idea激活码教程2025.1.1.1永久有效激活码绝对有效2025.1.1.1

    Idea激活码教程2025.1.1.1永久有效激活码绝对有效2025.1.1.1Idea 激活码教程永久有效 2025 1 1 1 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2025 1 1 1 成功激活

    2025年5月21日
    11
  • 微信小程序列表页面_微信发现没有小程序

    微信小程序列表页面_微信发现没有小程序尽量不要用缓存去写效果展示:点击编辑,进入编辑页第一页编辑按钮:<viewclass=”bj-btn”bindtap=”redactGroup”data-id=”{{传递的id}}”>编辑</view>redactGroup方法:options.currentTarget.dataset.前面自定义的名字redactGroup(options){letid=options.currentTarget.dataset.id;…

    2022年8月19日
    13

发表回复

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

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