
com.kedauis.util.DateUtil Maven / Gradle / Ivy
The newest version!
package com.kedauis.util;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* 项目名称:kd-uip
* 类描述:
* 创建人:QiuYu
* 创建时间:2017/12/22 16:47
* 修改人:
* 修改时间:
* 修改备注:
*/
public class DateUtil {
/**
* author QiuYu
* date 2017/12/29
* time 13:31
* description 格式化时间
* @param date 要格式化的日期
* @param dateFormat 格式
* @return 格式化后的时间
*/
public static String format(String dateFormat, Date date) {
return new SimpleDateFormat(dateFormat).format(date);
}
/**
* author QiuYu
* date 2017/12/29
* time 13:30
* description 格式化时间
* @param calendar 要格式化的日期
* @param dateFormat 格式
* @return 格式化后的时间
*/
public static String format(String dateFormat, Calendar calendar) {
return format(dateFormat, calendar.getTime());
}
/**
* author QiuYu
* date 2018/1/4
* time 9:53
* description 按照指定格式获取日期
* @param dateFormat 格式化格式
* @param dateStr 日期
* @return 解析后的日期
*/
public static Date parse(String dateFormat, String dateStr){
try {
return new SimpleDateFormat(dateFormat).parse(dateStr);
} catch (ParseException e) {
}
return null;
}
/**
* author QiuYu
* date 2017/12/22
* time 16:48
* descriptione 获取yyyy-MM-dd HH:mm:ss格式的当前日期字符串
* @return 日期字符串
*/
public static String getNowDateStr() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(Calendar.getInstance().getTime());
}
/**
* author QiuYu
* date 2017/12/22
* time 16:48
* descriptione 获取yyyyMMddHHmmss格式的当前日期字符串
* @return 获取时间格式的字符串
*/
public static String getNowTimeStr() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
return dateFormat.format(Calendar.getInstance().getTime());
}
/**
* 获取时间间隔(按天)
* @param stime 开始时间
* @param etime 结束时间
* @return 间隔
*/
public static long getBetweenDays(String stime, String etime) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date sdate = null;
Date eDate = null;
try {
sdate = df.parse(stime);
eDate = df.parse(etime);
} catch (ParseException e) {
e.printStackTrace();
}
long betweendays = (long) ((eDate.getTime() - sdate.getTime()) / (1000 * 60 * 60 * 24) + 0.5);//天数间隔
return betweendays;
}
protected static SimpleDateFormat dateLongFormat = new SimpleDateFormat("yyyyMMddHHmmss");
protected static SimpleDateFormat yearMonthFormat = new SimpleDateFormat("yyyyMM");
protected static SimpleDateFormat dateDtFormat = new SimpleDateFormat("yyyyMMdd");
protected static SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
/**
* 方法说明:获取某月最后一天
*
* @param year 年份,例如2017
* @param month 月份,1-12
* @param day 日期
* @return String 例如"20170331"
**/
public static String lastDayOfMonth(int year, int month, Integer day) {
StringBuffer result = new StringBuffer("");
if (month == 0 || month > 12) {
return result.toString();
}
Calendar calendar = Calendar.getInstance();
int currentMonth = calendar.get(Calendar.MONTH) + 1;
//若为当前月份,则返回今天日期
// if(month == currentMonth) {
// if(null == day) {
// day = calendar.get(Calendar.DAY_OF_MONTH);
// }
// result.append(year).append(formatToTwo(month)).append(formatToTwo(day));
// return result.toString();
// }
//1,3,5,7,8,10,12月
if (month == 1 || month == 3 || month == 5 || month == 7 ||
month == 8 || month == 10 || month == 12) {
if (null == day) {
day = 31;
}
result.append(year).append(formatToTwo(month)).append(formatToTwo(day));
}
//2月
if (month == 2) {
if (null == day) {
if (isLeapYear(year)) {
result.append(year).append(formatToTwo(month)).append("29");
} else {
result.append(year).append(formatToTwo(month)).append("28");
}
} else {
result.append(year).append(formatToTwo(month)).append(formatToTwo(day));
}
}
//4,6,9,11月
if (month == 4 || month == 6 || month == 9 || month == 11) {
if (null == day) {
day = 30;
}
result.append(year).append(formatToTwo(month)).append(formatToTwo(day));
}
return result.toString();
}
/**
* 判断闰年
* @param year 判断年限
* @return 是否是闰年
*/
public static Boolean isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 00) || year % 400 == 0) return true;
return false;
}
/**
* 格式化为两位字符串
* @param index 要格式化的数字
* @return 格式化后的数字
*/
public static String formatToTwo(int index) {
if (index < 10) {
return "0" + index;
}
return "" + index;
}
/**
* 获取最近12个月月末日期
* @param dateStr 例如 20170308
* @return 月末集合
**/
public static List getRecent12Months(String dateStr) {
List result = new ArrayList();
if (StringUtils.isEmpty(dateStr) || dateStr.length() != 8) {
return result;
}
String yearStr = dateStr.substring(0, 4);
String monthStr = dateStr.substring(4, 6);
Integer day = Integer.parseInt(dateStr.substring(6, 8));
int year = Integer.parseInt(yearStr);
int month = Integer.parseInt(monthStr);
int offsetLastYear = 12 - month;
//去年
for (int i = 1; i <= offsetLastYear; i++) {
int lastYear = year - 1;
int monthLastYear = month + i;
result.add(lastDayOfMonth(lastYear, monthLastYear, null));
}
//今年
for (int j = 1; j <= month; j++) {
if (j == month) {
result.add(lastDayOfMonth(year, j, day));
} else {
result.add(lastDayOfMonth(year, j, null));
}
}
return result;
}
/**
* 获取上月的同一天日期
* @param date 时间
* @return 上月的同一天
*/
public static String getDateOfLastMonth(Calendar date) {
Calendar lastDate = (Calendar) date.clone();
lastDate.add(Calendar.MONTH, -1);
Date last = lastDate.getTime();
return dateDtFormat.format(last);
}
/**
* 获取上月的同一天日期
* @param dateStr 日期
* @return 上月的同一天
* @throws ParseException 日期解析异常
*/
public static String getDateOfLastMonth(String dateStr) throws ParseException {
Date date = dateDtFormat.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return getDateOfLastMonth(calendar);
}
/**
* 方法说明:获取今天日期
* @return String 例如"20170331"
**/
public static String getCurrentDate() {
return dateDtFormat.format(new Date());
}
/**
* 方法说明:获取昨天日期
*
* @param date 指定日期
* @return String 例如"20170331"
**/
public static String getDateOfYesterday(Calendar date) {
Calendar lastDay = (Calendar) date.clone();
lastDay.add(Calendar.DATE, -1);
Date yesterday = lastDay.getTime();
return dateDtFormat.format(yesterday);
}
/**
* 获取上月最后一天
* @param calendar 日期
* @return 指定日期上月的最后一天
*/
public static String getLastDayOfLastMonth(Calendar calendar) {
Calendar date = (Calendar) calendar.clone();
date.set(Calendar.DAY_OF_MONTH, 1);
date.add(Calendar.DATE, -1);
Date last = date.getTime();
return dateDtFormat.format(last);
}
/**
* 获取今年所有月份最后一天
* @return 今年所有月份最后一天
*/
public static List getLastDayOfMonthOfThisYear() {
List list = new ArrayList();
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
for (int i = 1; i <= month; i++) {
String date = lastDayOfMonth(year, i, null);
list.add(date);
}
return list;
}
/**
* 格式化月份
* @param month 月份
* @return 格式后的月份
*/
public static String formatMonth(String month) {
if (month.substring(0, 4).equals(yearFormat.format(new Date()))) {
return Integer.parseInt(month.substring(4, 6)) + "月";
}
return month;
}
/**
* 获取上一个月份
* @param recentMonth 最近月份
* @return 上月月份
*/
public static String getFormerMonth(String recentMonth) {
Integer year = Integer.parseInt(recentMonth.substring(0, 4));
Integer month = Integer.parseInt(recentMonth.substring(4, 6));
if (month == 1) {
return "" + (year - 1) + 12;
} else if (month == 12 || month == 11) {
return "" + year + (month - 1);
} else {
return "" + year + "0" + (month - 1);
}
}
/**
* 获取上一个月份
* @param recentMonth 最近月份
* @return 上月月份
*/
public static String getFormerLastMonth(String recentMonth) {
Integer year = Integer.parseInt(recentMonth.substring(0, 4));
Integer month = Integer.parseInt(recentMonth.substring(4, 6));
if (month == 1) {
return "" + (year - 1) + 11;
} else if (month == 12) {
return "" + year + (month - 2);
} else {
return "" + year + "0" + (month - 2);
}
}
/**
* 获取月份的方法
* @param date 日期
* @return 所在月份
* @throws ParseException 时间解析错误
*/
public static int getMonth(String date) throws ParseException {
Calendar calendar = Calendar.getInstance();
Date time = dateDtFormat.parse(date);
calendar.setTime(time);
int month = calendar.get(Calendar.MONTH) + 1; //注意月份是从0开始的,比如当前7月,获得的month为6
return month;
}
/**
* 获取当前年月
* @return 当前年月
*/
public static String getCurrentYearMonth() {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
String dateNowStr = sdf.format(d);
return dateNowStr;
}
/**
* 月份有几天
* @param recentMonth 月份
* @return 月中日期
*/
public static List getMonthDays(String recentMonth) {
Integer year = Integer.parseInt(recentMonth.substring(0, 4));
Integer month = Integer.parseInt(recentMonth.substring(4, 6));
String lastDate = lastDayOfMonth(year, month, null);
Integer dayNums = Integer.parseInt(lastDate.substring(6, 8));
List days = new ArrayList<>();
for (int i = 1; i < dayNums + 1; i++) {
days.add(i);
}
return days;
}
/**
* 获取近30天日期
* @param calendar 日期
* @return 近30天日期
*/
public static List getRecent30Days(Calendar calendar) {
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
calendar.add(Calendar.MONTH, -1);
int lastMonth = calendar.get(Calendar.MONTH) + 1;
int daysOfLastMonth = calendar.getActualMaximum(Calendar.DATE);
List dateList = new ArrayList();
if (month == 1) {
if (day < 30) {
int diff = 30 - day;
for (int i = diff - 1; i >= 0; i--) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(year - 1).append(formatToTwo(lastMonth)).append(formatToTwo(daysOfLastMonth - i));
dateList.add(stringBuffer.toString());
}
}
} else if (month == 3) {
if (day < 30) {
int diff = 30 - day;
if (daysOfLastMonth < diff) {
int diff2 = 30 - day - daysOfLastMonth;
for (int i = diff2 - 1; i >= 0; i--) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(year).append("01").append(formatToTwo(31 - i));
dateList.add(stringBuffer.toString());
}
for (int j = 1; j <= daysOfLastMonth; j++) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(year).append("02").append(formatToTwo(j));
dateList.add(stringBuffer.toString());
}
} else {
for (int i = diff - 1; i >= 0; i--) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(year).append(formatToTwo(lastMonth)).append(formatToTwo(daysOfLastMonth - i));
dateList.add(stringBuffer.toString());
}
}
}
} else {
if (day < 30) {
int diff = 30 - day;
for (int i = diff; i >= 0; i--) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(year).append(formatToTwo(lastMonth)).append(formatToTwo(daysOfLastMonth - i));
dateList.add(stringBuffer.toString());
}
}
}
for (int j = 1; j <= day; j++) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(year).append(formatToTwo(month)).append(formatToTwo(j));
dateList.add(stringBuffer.toString());
}
return dateList;
}
/**
* 获取昨天日期
* @param dateStr 日期
* @return 昨天日期
* @throws ParseException 解析异常
*/
public static String getDateOfYesterday(String dateStr) throws ParseException {
Calendar calendar = Calendar.getInstance();
Date date = dateDtFormat.parse(dateStr);
calendar.setTime(date);
calendar.add(Calendar.DATE, -1);
Date yesterday = calendar.getTime();
return dateDtFormat.format(yesterday);
}
/**
* 获取昨天日期
* @return 昨天日期
*/
public static String getLastCurrent() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
String yesterday = dateDtFormat.format(cal.getTime());
return yesterday;
}
/**
* 获取本月第一天
* @param dateStr 日期
* @return 日期所在月第一天
* @throws ParseException 解析异常
*/
public static String getFirstDayOfThisMonth(String dateStr) throws ParseException {
Date date = dateDtFormat.parse(dateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return dateDtFormat.format(calendar.getTime());
}
/**
* 获取本月到本月第一天天数
* @param dateStr 日期
* @return 天数
*/
public static int getDaysNum(String dateStr) {
Calendar calendar = Calendar.getInstance();
String dayStr = dateStr.substring(6);
return Integer.parseInt(dayStr);
}
/**
* 方法说明:获取第一个月份
* @param strMonth 给定月份
* @return String 例如"201701"
**/
public static String getFirstMonth(String strMonth) {
if ("01".equalsIgnoreCase(strMonth.substring(4, 6))) {
return strMonth;
} else {
String year = strMonth.substring(0, 4);
return year + "01";
}
}
/**
* 获取上一年同一个月份
* @param recentMonth 月份
* @return 上年同一个月
*/
public static String getLastYearCurrentMonth(String recentMonth) {
Integer year = Integer.parseInt(recentMonth.substring(0, 4));
Integer month = Integer.parseInt(recentMonth.substring(4, 6));
return "" + (year - 1) + month;
}
/**
* 获取上一年最后一个月份
* @param recentMonth 月份
* @return 上年同一个月
*/
public static String getLastYearLastMonth(String recentMonth) {
Integer year = Integer.parseInt(recentMonth.substring(0, 4));
return "" + (year - 1) + "12";
}
/**
* 获取上一年倒数第二个月份
* @param recentMonth 月份
* @return 上年倒数第二个月
*/
public static String getLastYearNovMonth(String recentMonth) {
Integer year = Integer.parseInt(recentMonth.substring(0, 4));
return "" + (year - 1) + "11";
}
/**
* 方法说明:获取上一个小时
* @return String 例如"00-23"
* yyyyMMddHHmmss
**/
public static String getPreviousHour() {
String date = dateLongFormat.format(new Date());
String currentHour = date.substring(8, 10);
if ("00".equalsIgnoreCase(currentHour)) {
return "23";
} else {
return (Integer.valueOf(currentHour) - 1) + "";
}
}
/**
* 获取当前月份
* @return 当前月份
*/
public static String getCurrentMonth() {
String month = yearMonthFormat.format(new Date());
return month;
}
/**
* 获取当前年份
* @return 当前年份
*/
public static String getCurrentYear() {
String year = yearFormat.format(new Date());
return year;
}
/**
* 获取去年年份
* @return 去年年份
*/
public static String getLastYearCurrent() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) - 1);
int year = cal.get(Calendar.YEAR);
return String.valueOf(year);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy