1、日期格式化-工具类-One
/**
* 日期工具类
*/
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
private static String[] parsePatterns = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
/**
* 得到当前日期字符串 格式(yyyy-MM-dd)
*/
public static String getDate() {
return getDate("yyyy-MM-dd");
}
/**
* 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
*/
public static String getDate(String pattern) {
return DateFormatUtils.format(new Date(), pattern);
}
/**
* 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
*/
public static String formatDate(Date date, Object... pattern) {
String formatDate = null;
if (pattern != null && pattern.length > 0) {
formatDate = DateFormatUtils.format(date, pattern[0].toString());
} else {
formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
}
return formatDate;
}
/**
* 字符串转日期
* 默认格式(yyyy-MM-dd HH:mm:ss) pattern可以为:"yyyy-MM-dd" "HH:mm:ss"
*/
public static Date stringToDate(String string, String pattern) {
SimpleDateFormat sdf = null;
Date date = null;
try {
if (pattern != null && pattern.length() > 0) {
sdf = new SimpleDateFormat(pattern);
date = sdf.parse(string);
} else {
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = sdf.parse(string);
}
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 得到日期时间字符串,转换格式(yyyy-MM-dd HH:mm:ss)
*/
public static String formatDateTime(Date date) {
return formatDate(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* 得到当前时间字符串 格式(HH:mm:ss)
*/
public static String getTime() {
return formatDate(new Date(), "HH:mm:ss");
}
/**
* 得到当前日期和时间字符串 格式(yyyy-MM-dd HH:mm:ss)
*/
public static String getDateTime() {
return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
}
/**
* 得到当前年份字符串 格式(yyyy)
*/
public static String getYear() {
return formatDate(new Date(), "yyyy");
}
/**
* 得到当前月份字符串 格式(MM)
*/
public static String getMonth() {
return formatDate(new Date(), "MM");
}
/**
* 得到当天字符串 格式(dd)
*/
public static String getDay() {
return formatDate(new Date(), "dd");
}
/**
* 得到当前星期字符串 格式(E)星期几
*/
public static String getWeek() {
return formatDate(new Date(), "E");
}
/**
* 得到当前星期字符串 格式(E)星期几
*
* @param string
*/
public static String getWeek(String string) {
return formatDate(stringToDate(string, ""), "E");
}
/**
* 日期型字符串转化为日期 格式
* { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
* "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm",
* "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm" }
*/
public static Date parseDate(Object str) {
if (str == null) {
return null;
}
try {
return parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
/**
* 获取过去的天数
*
* @param date
* @return
*/
public static long pastDays(Date date) {
long t = System.currentTimeMillis() - date.getTime();
return t / (24 * 60 * 60 * 1000);
}
/**
* 获取过去的小时
*
* @param date
* @return
*/
public static long pastHour(Date date) {
long t = System.currentTimeMillis() - date.getTime();
return t / (60 * 60 * 1000);
}
/**
* 获取过去的分钟
*
* @param date
* @return
*/
public static long pastMinutes(Date date) {
long t = System.currentTimeMillis() - date.getTime();
return t / (60 * 1000);
}
/**
* 转换为时间(天,时:分:秒.毫秒)
*
* @param timeMillis
* @return
*/
public static String formatDateTime(long timeMillis) {
long day = timeMillis / (24 * 60 * 60 * 1000);
long hour = (timeMillis / (60 * 60 * 1000) - day * 24);
long min = ((timeMillis / (60 * 1000)) - day * 24 * 60 - hour * 60);
long s = (timeMillis / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
long sss = (timeMillis - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000 - s * 1000);
return (day > 0 ? day + "," : "") + hour + ":" + min + ":" + s + "." + sss;
}
/**
* 获取两个日期之间的天数
*
* @param before
* @param after
* @return
*/
public static double getDistanceOfTwoDate(Date before, Date after) {
long beforeTime = before.getTime();
long afterTime = after.getTime();
return (afterTime - beforeTime) / (1000 * 60 * 60 * 24);
}
/**
* 获取当前日期前一天日期
*
* @return
*/
public static String getBeforeDate() {
Calendar calendar = Calendar.getInstance(); //得到日历
calendar.setTime(new Date());//把当前时间赋给日历
calendar.add(Calendar.DAY_OF_MONTH, -1); //设置为前一天
Date dBefore = calendar.getTime(); //得到前一天的时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //设置时间格式
String beforeDate = sdf.format(dBefore); //格式化前一天
return beforeDate;
}
/**
* @param day 获取当前日期前后day天日期,day>0后几天,day<0前几天
* @param curdate 当前日期
* @return
*/
public static String getAfterDate(int day, String curdate, String dateFormat) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(stringToDate(curdate, dateFormat));
calendar.add(Calendar.DAY_OF_MONTH, day);
Date dAfter = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String afterDate = sdf.format(dAfter);
return afterDate;
}
/**
* @param day 获取当前日期前后day天日期,day>0后几天,day<0前几天
* @return
*/
public static String getAfterDate(int day, String dateFormat) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DAY_OF_MONTH, day);
Date dAfter = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String afterDate = sdf.format(dAfter);
return afterDate;
}
public static Date getThisWeekMonday(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 获得当前日期是一个星期的第几天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int day = cal.get(Calendar.DAY_OF_WEEK);
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
return cal.getTime();
}
/**
* 获取本周一
*
* @param dateFormat
* @return
*/
public static String getThisWeekMonday(String dateFormat) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
// 获得当前日期是一个星期的第几天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int day = cal.get(Calendar.DAY_OF_WEEK);
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式
return sdf.format(cal.getTime());
}
/**
* 获取下周一
*
* @param dateFormat
* @return
*/
public static String getNextWeekMonday(String dateFormat) {
Calendar cal = Calendar.getInstance();
cal.setTime(getThisWeekMonday(new Date()));
cal.add(Calendar.DATE, 7);
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式
return sdf.format(cal.getTime());
}
/**
* 获取下月
*
* @return
*/
public static String getNextMonth() {
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, +1);//下个月
String year = String.valueOf(c.get(Calendar.YEAR));
//下个月
String nextMonth = String.valueOf(c.get(Calendar.MONTH) + 1).length() == 2 ? String.valueOf(c.get(Calendar.MONTH) + 1) : "0" + String.valueOf(c.get(Calendar.MONTH) + 1);
return year + "-" + nextMonth;
}
/**
* 获取本月
*
* @return
*/
public static String getThisMonth() {
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 0);//本月
String year = String.valueOf(c.get(Calendar.YEAR));
//本月
String thisMonth = String.valueOf(c.get(Calendar.MONTH) + 1).length() == 2 ? String.valueOf(c.get(Calendar.MONTH) + 1) : "0" + String.valueOf(c.get(Calendar.MONTH) + 1);
return year + "-" + thisMonth;
}
/**
* 当前季度的开始时间
*
* @return
*/
public static String getCurrentQuarterStartTime(String dateFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH);
try {
if (currentMonth >= 1 && currentMonth <= 3) {
c.set(Calendar.MONTH, 0);
} else if (currentMonth >= 4 && currentMonth <= 6) {
c.set(Calendar.MONTH, 3);
} else if (currentMonth >= 7 && currentMonth <= 9) {
c.set(Calendar.MONTH, 6);
} else if (currentMonth >= 10 && currentMonth <= 12) {
c.set(Calendar.MONTH, 9);
c.set(Calendar.DATE, 1);
}
} catch (Exception e) {
e.printStackTrace();
}
return sdf.format(c.getTime());
}
/**
* 当前季度的结束时间
*
* @return
*/
public static String getCurrentQuarterEndDate(String dateFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH) + 1;
try {
if (currentMonth >= 1 && currentMonth <= 3) {
c.set(Calendar.MONTH, 2);
c.set(Calendar.DATE, 31);
} else if (currentMonth >= 4 && currentMonth <= 6) {
c.set(Calendar.MONTH, 5);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 7 && currentMonth <= 9) {
c.set(Calendar.MONTH, 8);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 10 && currentMonth <= 12) {
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
}
} catch (Exception e) {
e.printStackTrace();
}
c.setTime(new Date());
return sdf.format(c.getTime());
}
/**
* 当前季度的结束时间
*
* @return
*/
public static String getCurrentQuarterEndDate(String dateFormat, String curMonth) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat); //设置时间格式
Calendar c = Calendar.getInstance();
int currentMonth = c.get(Calendar.MONTH) + 1;
try {
if (currentMonth >= 1 && currentMonth <= 3) {
c.set(Calendar.MONTH, 2);
c.set(Calendar.DATE, 31);
} else if (currentMonth >= 4 && currentMonth <= 6) {
c.set(Calendar.MONTH, 5);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 7 && currentMonth <= 9) {
c.set(Calendar.MONTH, 8);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 10 && currentMonth <= 12) {
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
}
} catch (Exception e) {
e.printStackTrace();
}
c.setTime(stringToDate(curMonth, dateFormat));
return sdf.format(c.getTime());
}
/**
* 获取月份
*
* @param -month 前month月,i后month月
* @param dateFormat 日期格式
* @return
*/
public static String getMonth(int month, String dateFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(Calendar.MONTH, month);
Date m = c.getTime();
return sdf.format(m);
}
/**
* 获取月份
*
* @param -month 前month月,month后month月
* @param dateFormat 日期格式 yyyyMM
* @param curMonth
* @return
*/
public static String getMonth(int month, String curMonth, String dateFormat) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Calendar c = Calendar.getInstance();
c.setTime(stringToDate(curMonth, dateFormat));
c.add(Calendar.MONTH, month);
Date m = c.getTime();
return sdf.format(m);
}
/**
* 获取前minute分钟时间:如-4,后minute分钟时间:如 4
*
* @param minute 格式 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getBeforeMinute(int minute) {
SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]);
Calendar beforeTime = Calendar.getInstance();
beforeTime.add(Calendar.MINUTE, minute);
Date beforeD = beforeTime.getTime();
String time = sdf.format(beforeD);
return time;
}
public static Date getIntervalMinute(int minute) {
SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]);
Calendar beforeTime = Calendar.getInstance();
beforeTime.add(Calendar.MINUTE, minute);
Date beforeD = beforeTime.getTime();
return beforeD;
}
/**
* 获取前minute分钟:如-4,后minute分钟:如 4
* @param minute
* @return
*/
public static int getMinute(int minute){
String dataTime = getBeforeMinute(minute);
String[] time = dataTime.split(" ")[1].split(":");
//时间转为分钟数
int mi = Integer.valueOf(time[0])*60 + Integer.valueOf(time[1]);
return mi;
}
/**
* 获取前minute分钟时间:如-4,后minute分钟时间:如 4
*
* @param curDateTime 当前时间
* @param minute 间隔分钟
* 格式 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getBeforeMinute(String curDateTime, int minute) {
SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]);
Calendar beforeTime = Calendar.getInstance();
beforeTime.setTime(stringToDate(curDateTime, null));
beforeTime.add(Calendar.MINUTE, minute);
Date beforeD = beforeTime.getTime();
String time = sdf.format(beforeD);
return time;
}
/**
* 获取前hour小时:如-4,后hour小时:如 4
*
* @param hour 格式 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getBeforeHour(int hour) {
SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]);
Calendar beforeTime = Calendar.getInstance();
beforeTime.add(Calendar.HOUR_OF_DAY, hour);
Date beforeD = beforeTime.getTime();
String time = sdf.format(beforeD);
return time;
}
/**
* 获取前second秒:如-4,后second秒:如 4
*
* @param second 格式 yyyy-MM-dd HH:mm:ss
* @return
*/
public static String getBeforeSecond(int second) {
SimpleDateFormat sdf = new SimpleDateFormat(parsePatterns[1]);
Calendar beforeTime = Calendar.getInstance();
beforeTime.add(Calendar.SECOND, second);
Date beforeD = beforeTime.getTime();
String time = sdf.format(beforeD);
return time;
}
/**
* @param date1 字符串日期1
* @param date2 字符串日期2
* @param pattern 日期格式化方式
* @return
* @descript:计算两个字符串月相差的月数
*/
public static int countMonths(String date1, String date2, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
try {
c1.setTime(sdf.parse(date1));
c2.setTime(sdf.parse(date2));
} catch (ParseException e) {
e.printStackTrace();
}
int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
//开始日期若小月结束日期
if (year < 0) {
year = -year;
return year * 12 + c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH);
}
return year * 12 + c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
}
/**
* 获取当前时间前几天,当前天,后几天日期yyyyMMdd
*
* @param day 和当期天的间隔天数 day前几天,-day:前day天,day:后day天
* @param dateFormat 时间格式
* @return
*/
public static String getDay(int day, String dateFormat) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, day);
Date date = calendar.getTime();
SimpleDateFormat df = new SimpleDateFormat(dateFormat);
return df.format(date);
}
/**
* 获取当前时间前几天,当前天,后几天日期yyyyMMdd
*
* @param day 和当期天的间隔天数 day前几天,-day:前day天,day:后day天
* @param dateFormat 时间格式
* @return
*/
public static String getDay(int day, String dateFormat, String curDay) {
Calendar c = Calendar.getInstance();
c.setTime(stringToDate(curDay, dateFormat));
c.add(Calendar.DATE, day);
Date date = c.getTime();
SimpleDateFormat df = new SimpleDateFormat(dateFormat);
return df.format(date);
}
/**
* 获取当前时间小时
*
*/
public static String getHour() {
GregorianCalendar calendar = new GregorianCalendar();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
return hour + "";
}
/**
* 星期表达式转换
*
* @param weekType
* @return
*/
public static int getNumWeek(String weekType) {
int week = 0;
switch (weekType) {
case "星期一":
week = 1;
break;
case "星期二":
week = 2;
break;
case "星期三":
week = 3;
break;
case "星期四":
week = 4;
break;
case "星期五":
week = 5;
break;
case "星期六":
week = 6;
break;
case "星期日":
week = 7;
break;
default:
}
return week;
}
/**
* 星期表达式转换
*
* @param weekNum
* @return
*/
public static String getWeekByNum(Integer weekNum) {
String week = "";
switch (weekNum) {
case 1:
week = "星期一";
break;
case 2:
week = "星期二";
break;
case 3:
week = "星期三";
break;
case 4:
week = "星期四";
break;
case 5:
week = "星期五";
break;
case 6:
week = "星期六";
break;
case 7:
week = "星期日";
break;
default:
}
return week;
}
/**
* @param week 星期类型 :例如:星期一、星期二、星期三、星期四、星期五、星期六、星期日
* @param dateFormat 返回的日期格式
* @return
*/
public static String getDayByWeek(String week, String dateFormat) {
int numWeek1 = getNumWeek(getWeek());
int numWeek2 = getNumWeek(week);
int weekdiff = numWeek2 - numWeek1;
return getDay(weekdiff, dateFormat);
}
/**
* @param week 星期类型 :例如:星期一、星期二、星期三、星期四、星期五、星期六、星期日
* @param dateFormat 返回的日期格式
* @return
*/
public static String getDayByWeek(String week, String dateFormat, String curDay) {
int numWeek1 = getNumWeek(getWeek(curDay));
int numWeek2 = getNumWeek(week);
int weekdiff = numWeek2 - numWeek1;
return getDay(weekdiff, dateFormat, curDay);
}
/**
* 当前日期所在周的前一周
* 例如:201907
*
* @return
* @throws ParseException
*/
public static String getWeekAndYear(int day) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = format.parse(getAfterDate(day, "yyyy-MM-dd"));
} catch (ParseException e) {
e.getMessage();
}
Calendar cal = Calendar.getInstance();
//设置周一为一周的第一天
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setTime(date);
int week = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
//如果月份是12月,且求出来的周数是第一周,说明该日期实质上是这一年的第53周,也是下一年的第一周
if(month>=11 && week <= 1){
week +=52;
}
String yearWeek = "";
if (week < 10) {
yearWeek = year + "0" + week;
} else {
yearWeek = year + "" + week;
}
return yearWeek;
}
/**
* 当前日期所在周的前一周
* 例如:201907
*
* @return
* @throws ParseException
*/
public static String getWeekAndYear(int day, String curWeek) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = format.parse(getAfterDate(day, "yyyy-MM-dd"));
} catch (ParseException e) {
e.getMessage();
}
Calendar cal = Calendar.getInstance();
//设置周一为一周的第一天
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setTime(date);
int week = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
//如果月份是12月,且求出来的周数是第一周,说明该日期实质上是这一年的第53周,也是下一年的第一周
if(month>=11 && week <= 1){
week +=52;
}
String yearWeek = "";
if (week < 10) {
yearWeek = year + "0" + week;
} else {
yearWeek = year + "" + week;
}
return yearWeek;
}
/**
* 通过日期获取周数
* 格式:yyyy-MM-dd
* @param day
* @return
*/
public static String getWeekAndYear(String day, String pattern) {
SimpleDateFormat format = new SimpleDateFormat(pattern);
Date date = null;
try {
date = format.parse(day);
} catch (ParseException e) {
e.getMessage();
}
Calendar cal = Calendar.getInstance();
//设置周一为一周的第一天
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setTime(date);
int week = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
//如果月份是12月,且求出来的周数是第一周,说明该日期实质上是这一年的第53周,也是下一年的第一周
if(month>=11 && week <= 1){
week +=52;
}
String yearWeek = "";
if (week < 10) {
yearWeek = year + "0" + week;
} else {
yearWeek = year + "" + week;
}
return yearWeek;
}
/**
* 获取日期所在周
*
* @param curDate 格式:yyyyMMdd
* @return
*/
public static String getWeekByDate(String curDate) {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date date = null;
try {
date = format.parse(curDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
int week = calendar.get(Calendar.WEEK_OF_YEAR);
int year = calendar.getWeekYear();
String yearWeek = "";
if(week <10){
yearWeek = year + "0"+ week;
}else{
yearWeek = year + ""+ week;
}
return yearWeek;
}
/**
* 增加半小时
* @param day
* @param min
* @return
*/
public static String addHalfHour(String day, int min){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = format.parse(day);
} catch (Exception ex) {
ex.printStackTrace();
}
if (date == null) {
return "";
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 24小时制
cal.add(Calendar.MINUTE, min);
date = cal.getTime();
return format.format(date);
}
/**
* 窗口时间换算成毫秒数
* @param windowTime
* @return
*/
public static Long getWindowMillis(String windowTime){
long windowTimeSecond = -1;
String hour = "小时";
String minute = "分钟";
String second = "秒";
if (windowTime == null || windowTime.trim().length() == 0) {
return windowTimeSecond;
}
windowTime = windowTime.replaceAll(" ", "");
if (windowTime.indexOf(second) > 0) {
windowTime = windowTime.replace(second, "").trim();
windowTimeSecond = Integer.parseInt(windowTime) * 1000;
} else if (windowTime.indexOf(minute) > 0) {
windowTime = windowTime.replace(minute, "").trim();
windowTimeSecond = Integer.parseInt(windowTime) * 60 * 1000;
} else if (windowTime.indexOf(hour) > 0) {
windowTime = windowTime.replace(hour, "").trim();
windowTimeSecond = Integer.parseInt(windowTime) * 60 * 60 * 1000;
}
return windowTimeSecond;
}
/**
* 获取所在周开始时间
* @param weekYear 年 2020
* @param weekOfYear 周 12
* @param pattern 日期格式
* @return
*/
public static String getFirstDayOfWeek(int weekYear, int weekOfYear, String pattern){
Calendar calendar = Calendar.getInstance();
//设置星期一为一周开始的第一天
calendar.setFirstDayOfWeek(Calendar.MONDAY);
//可以不用设置
calendar.setMinimalDaysInFirstWeek(4);
calendar.setTimeInMillis(System.currentTimeMillis());
//获得指定年的第几周的开始日期
calendar.setWeekDate(weekYear, weekOfYear, 2);
//创建日期的时间该周的第一天
long starttime = calendar.getTime().getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
//将时间戳格式化为指定格式
String dateStart = simpleDateFormat.format(starttime);
dateStart = getAfterDate(-7, dateStart, pattern);
return dateStart;
}
/**
* 获取指定周前几周
* @param curWeek 当前周 202012
* @param num 前后几周
* @param pattern 日期格式
* @return
*/
public static String getAfterWeek(String curWeek,int num, String pattern){
//年
int weekYear = Integer.valueOf(curWeek.substring(0,4));
//周数
int weekOfYear = Integer.valueOf(curWeek.substring(4,6));
//周对应的开始日期
String weekDate = getFirstDayOfWeek(weekYear, weekOfYear, pattern);
//获取前后几天
String afterDate = getAfterDate(num*7, weekDate, pattern);
String yearAndWeek = getWeekAndYear(afterDate,pattern);
//年
int weekYear1 = Integer.valueOf(yearAndWeek.substring(0,4));
//当前年和前一年同时存在,取当前年第一周
if(weekYear > weekYear1){
yearAndWeek = weekYear+"01";
}
return yearAndWeek;
}
/**
* 计算相差的天数
* @param startDate
* @param endDate
* @return
* @throws ParseException
*/
public static int getDayDiffer(Date startDate, Date endDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
long startDateTime = 0;
try {
startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime();
long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime();
return (int) ((endDateTime - startDateTime) / (1000 * 3600 * 24));
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
public static int getMiniteDiffer(Date startDate, Date endDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long startDateTime = 0;
try {
startDateTime = dateFormat.parse(dateFormat.format(startDate)).getTime();
long endDateTime = dateFormat.parse(dateFormat.format(endDate)).getTime();
return (int) (endDateTime - startDateTime) / (1000 * 60);
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
/**
* 获取指定时间diff小时后的数据
* @param strDate
* @param pattern
* @param diff
* @return
*/
public static String getHourDiffer(String strDate, String pattern, int diff) {
Date date = DateUtils.stringToDate(strDate, pattern);
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(date);
rightNow.add(Calendar.HOUR, diff);
rightNow.add(Calendar.MINUTE, -5);
Date time = rightNow.getTime();
String times = DateUtils.formatDateTime(time);
return times;
}
}