供实际开发调用
package com.hzsh.eomc.common.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import lombok.extern.log4j.Log4j2;
@Log4j2
public class CDateTimeUtil {
/**
* 按照指定的样式,返回获取系统时间,例如样式为yyyy-MM-dd HH:mm:ss
* @Title: sysDateTime
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return String 返回类型
* @throws
*/
public static String sysDateTime(String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = new Date();
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
return sdf.format(date);
}
/**
* 返回Long型系统时间
* @Title: sysDateTimeLong
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return String 返回类型
* @throws
*/
public static long sysDateTimeLong() {
return new Date().getTime();
}
/**
* @throws ParseException
* 日期时间字符串,转long型
* @Title: dateTimeStr2Long
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return long 返回类型
* @throws
*/
public static long dateTimeStr2Long(String dateTimeStr) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
long retDateTime = 0;
try {
retDateTime = sdf.parse(dateTimeStr).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return retDateTime;
}
/**
* 该方法用于获取前后移动n天、n月、年的时间
* CalendarType示例:Calendar.DAY_OF_MONTH
* index示例:-1
* patten为获取时间的样式,示例:yyyy-MM-dd HH:mm:ss
* 则此时,标示获取前一个月的时间
* @Title: beforeOrAfterSysTime
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return String 返回类型
* @throws
*/
public static String beforeOrAfterSysTime(int CalendarType, int index, String patten){
Date pre_day_time = new Date();
Calendar rightNow = Calendar.getInstance();
rightNow.add(CalendarType, index); //获取前一天日期
pre_day_time = rightNow.getTime();
SimpleDateFormat sim = new SimpleDateFormat(patten);
sim.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
return sim.format(pre_day_time);
}
/**
* a获取指定月份最后一天日期
* @param dateStr,样式:yyyy-MM 例如:2021-04
* @return
*/
public static String getLastDayOfMonth(String dateStr)
{
if(!isDate(dateStr, "yyyy-MM") || dateStr.length() != 7) {
log.error("获取指定月份最后一天日期出错,给定月份合适非法:" + dateStr + "\t请按照样式yyyy-MM(例如:2021-04)给出");
return null;
}
int year = Integer.parseInt(dateStr.substring(0, 4));
int month = Integer.parseInt(dateStr.substring(5, 7));
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
/**
* 该方法用于将字符串类型时间转换成日期类型yyyy-MM-dd HH:mm:ss
* @Title: str2Date
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param dateStr
* @return
* @throws ParseException Date 返回类型
* @throws
*/
public static Date str2Date(String dateStr, String partten, boolean isLenient) throws ParseException{
SimpleDateFormat sim = new SimpleDateFormat(partten);
//设置日期转化时,是否进位
sim.setLenient(isLenient);
Date d = null;
d = sim.parse(dateStr);
return d;
}
public static boolean isDate(String dateStr, String partten) {
try {
str2Date(dateStr, partten, false);
return true;
}catch(Exception e) {
return false;
}
}
public static String longDate2Str(long dateLong) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(dateLong);
return sdf.format(date);
}
/**
* 根据传入的时间和参数,获取向前或向后的时间
* 例如dateRoll("2021-06-01 16:11:26",Calendar.MINUTE,-19)
* 返回2021-06-01 15:52:26
* @param date
* @param i
* @param d
* @return
*/
public static String dateRoll(String timeNow, int i, int d) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = simpleDateFormat.parse(timeNow);
// 获取Calendar对象并以传进来的时间为准
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 将现在的时间滚动固定时长,转换为Date类型赋值
calendar.add(i, d);
// 转换为Date类型再赋值
date = calendar.getTime();
return simpleDateFormat.format(date);
}
}