日期的工具类

日期的工具类

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)


相关推荐

  • robotium例子

    robotium例子android基础知识12:android自动化测试04—Robotium:实例(上):http://daimajishu.iteye.com/blog/1556631robotium方法学习实例:http://blog.csdn.net/gzh0222/article/details/7335666Android自动化测试—Robotium:实例(上):http:/

  • Python介绍和安装

    Python介绍和安装python介绍和安装1.Python简介Python是一种广泛使用的解释型、高级和通用的编程语言。Python支持多种编程范型,包括函数式、指令式、结构化、面向对象和反射式编程。它拥有动态类型

  • FormatDateTime的用法

     FormatDateTime的用法声明:function FormatDateTime(const Format: string; DateTime: TDateTime): string; overload;当然和Format一样还有一种,但这里只介绍常用的第一种Format参数是一个格式化字符串。DateTime是时间类型。返回值是一种格式化后的字符串重点来看Format参数中的指令字符

  • android 测试用例模板下载,app测试用例模板.doc

    android 测试用例模板下载,app测试用例模板.docapp测试用例模板APP基本测试用例个人首页1.我的页面2.个人信息页面3.个性标签页面4.TA的页面消息页面消息页面发布商品和图片发布商品分享图片买买买页面买买买页面一级分类页面买手热荐品类二级分类页面侧边栏页面购物车页面我的钱包页面一、编号条件步骤预期结果实际结果1打开我的页面?出现我的信息(头像、昵称、签名、关注数、粉丝数、入手、出手)、中部出现切换我发表的与我喜欢的tab、下部列表出现内容…

  • Oracle联合索引

    Oracle联合索引Oracle联合索引分类:Oracle2012-12-0809:352110人阅读评论(0)收藏举报我现在用的是oracle9i1.一个表建立多少个索引比较合适?比如说不大于5个这个没有定论,楼主要综合查询效率和dml效率自己确定,索引可以加快select的查询速度,但也会降低delete,insert和update等dml语句的执行速度。2.联…

  • java 二维数组 arraycopy_Java对数组的复制[通俗易懂]

    java 二维数组 arraycopy_Java对数组的复制[通俗易懂]定义一个数组int[]a={3,1,4,2,5};int[]b=a;数组b只是对数组a的又一个引用,即浅拷贝。如果改变数组b中元素的值,其实是改变了数组a的元素的值,要实现深度复制,可以用clone或者System.arrayCopyint[]a={3,1,4,2,5};int[]b=a.clone();b[0]=10;System.out.println(b[0]+””+a[0…

发表回复

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

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