更新
如果JDK版本1.8及以上,有更好的选择。JAVA时间工具类【DateTimeFormatter】
时间工具类
- 支持 指定日期的【月,季,半年,年】开始结束时间【yyyyMMdd】格式
- 支持 获取开始结束时间区间的【月,季,半年,年】时间List
- 支持 将【月,季,半年,年】字符串转为年,月List
import org.apache.commons.lang.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author: guochao.bj@fang.com
* @createDate: 2021/12/22 16:27
*/
public class TimeUtil {
/**
* 获取 当前年、半年、季度、月、日、小时 开始结束时间
*/
private final static SimpleDateFormat shortSdf = new SimpleDateFormat("yyyy-MM-dd");
private final static SimpleDateFormat longSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private final static SimpleDateFormat _shortSdf = new SimpleDateFormat("yyyyMMdd");
/**
* 目标日期月份的开始时间
*
* @return
*/
public static Date getCurrentMonthBeginTime(String targetDate) {
Date from=null;
try {
from = shortSdf.parse(targetDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(from);
Date now = null;
try {
cal.set(Calendar.DATE, 1);
now = _shortSdf.parse(_shortSdf.format(cal.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 目标日期月份的结束时间
*
* @return
*/
public static Date getCurrentMonthEndTime(String targetDate) {
Date from=null;
try {
from = shortSdf.parse(targetDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(from);
Date now = null;
try {
cal.set(Calendar.DATE, 1);
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DATE, -1);
now = _shortSdf.parse(_shortSdf.format(cal.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 目标年的开始时间
*
* @return
*/
public static Date getCurrentYearBeginTime(String targetDate) {
Date from=null;
try {
from = shortSdf.parse(targetDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = Calendar.getInstance();
c.setTime(from);
Date now = null;
try {
c.set(Calendar.MONTH, 0);
c.set(Calendar.DATE, 1);
now = _shortSdf.parse(_shortSdf.format(c.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 目标年的结束时间
*
* @return
*/
public static Date getCurrentYearEndTime(String targetDate) {
Date from=null;
try {
from = shortSdf.parse(targetDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = Calendar.getInstance();
c.setTime(from);
Date now = null;
try {
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
now = _shortSdf.parse(_shortSdf.format(c.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 目标日期季度的开始时间
*
* @return
*/
public static Date getCurrentQuarterBeginTime(String targetDate) {
Date from=null;
try {
from = shortSdf.parse(targetDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = Calendar.getInstance();
c.setTime(from);
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 3) {
c.set(Calendar.MONTH, 0);
c.set(Calendar.DATE, 1);
} else if (currentMonth >= 4 && currentMonth <= 6) {
c.set(Calendar.MONTH, 3);
c.set(Calendar.DATE, 1);
} else if (currentMonth >= 7 && currentMonth <= 9) {
c.set(Calendar.MONTH, 6);
c.set(Calendar.DATE, 1);
} else if (currentMonth >= 10 && currentMonth <= 12) {
c.set(Calendar.MONTH, 9);
c.set(Calendar.DATE, 1);
}
now = _shortSdf.parse(_shortSdf.format(c.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 目标日期季度的结束时间
*
* @return
*/
public static Date getCurrentQuarterEndTime(String targetDate) {
Date from=null;
try {
from = shortSdf.parse(targetDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = Calendar.getInstance();
c.setTime(from);
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
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);
}
now = _shortSdf.parse(_shortSdf.format(c.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 获取目标日期的 前/后半年的开始时间
*
* @return
*/
public static Date getHalfYearBeginTime(String targetDate) {
Date from=null;
try {
from = shortSdf.parse(targetDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = Calendar.getInstance();
c.setTime(from);
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 6) {
c.set(Calendar.MONTH, 0);
c.set(Calendar.DATE, 1);
} else if (currentMonth >= 7 && currentMonth <= 12) {
c.set(Calendar.MONTH, 6);
c.set(Calendar.DATE, 1);
}
now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 获取目标日期的 前/后半年的结束时间
*
* @return
*/
public static Date getHalfYearEndTime(String targetDate) {
Date from=null;
try {
from = shortSdf.parse(targetDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = Calendar.getInstance();
c.setTime(from);
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = null;
try {
if (currentMonth >= 1 && currentMonth <= 6) {
c.set(Calendar.MONTH, 5);
c.set(Calendar.DATE, 30);
} else if (currentMonth >= 7 && currentMonth <= 12) {
c.set(Calendar.MONTH, 11);
c.set(Calendar.DATE, 31);
}
now = longSdf.parse(shortSdf.format(c.getTime()) + " 23:59:59");
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
*获取当前日期的前三年开始结束时间
*
*/
public static List<String> getNearDate(){
List<String> resultList = new ArrayList<>();
Calendar cal = Calendar.getInstance();
resultList.add(shortSdf.format(cal.getTime()));
cal.add(Calendar.YEAR,-3);
Date time = cal.getTime();
resultList.add(shortSdf.format(time));
return resultList;
}
/**
* 获取目标开始结束时间区间月度List
* @param startDateStr
* @param endDateStr
* @return java.util.List<java.lang.String> 2022年1月
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getMonthDateList(String startDateStr, String endDateStr)throws Exception{
Date startDate = shortSdf.parse(startDateStr);
Date endDate = shortSdf.parse(endDateStr);
List<String> dateList = new ArrayList<>();
if(startDate!=null&&endDate!=null&&!endDate.before(startDate)){
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
int SYEAR = startCalendar.get(Calendar.YEAR);
int SMONTH = startCalendar.get(Calendar.MONTH) + 1;
dateList.add(SYEAR+"年"+SMONTH+"月");
while(startDate.before(endDate)){
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
calendar.set(Calendar.DATE, 1);
calendar.add(Calendar.MONTH, 2);
calendar.add(Calendar.DATE, -1);
startDate = calendar.getTime();
if (startDate.before(endDate)){
int YEAR = calendar.get(Calendar.YEAR);
int MONTH = calendar.get(Calendar.MONTH) + 1;
dateList.add(YEAR+"年"+MONTH+"月");
}
}
Collections.reverse(dateList);
return dateList;
}
return null;
}
/**
* 获取目标开始结束时间区间季度List
* @param startDateStr
* @param endDateStr
* @return java.util.List<java.lang.String> 2021年4季度
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getQuarterDateList(String startDateStr, String endDateStr)throws Exception{
Date startDate = shortSdf.parse(startDateStr);
Date endDate = shortSdf.parse(endDateStr);
List<String> dateList = new ArrayList<>();
if(startDate!=null&&endDate!=null&&!endDate.before(startDate)){
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
int SYEAR = startCalendar.get(Calendar.YEAR);
int SMONTH = startCalendar.get(Calendar.MONTH) + 1;
int SQUARTER=0;
if (SMONTH<=3){
SQUARTER=1;
}else if(SMONTH<=6){
SQUARTER=2;
}else if (SMONTH<=9){
SQUARTER=3;
}else if (SMONTH<=12){
SQUARTER=4;
}
dateList.add(SYEAR+"年"+SQUARTER+"季度");
while(startDate.before(endDate)){
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
calendar.set(Calendar.DATE, 1);
calendar.add(Calendar.MONTH, 4);
calendar.add(Calendar.DATE, -1);
startDate = calendar.getTime();
if (startDate.before(endDate)){
int YEAR = calendar.get(Calendar.YEAR);
int MONTH = calendar.get(Calendar.MONTH) + 1;
int QUARTER=0;
if (MONTH<=3){
QUARTER=1;
}else if(MONTH<=6){
QUARTER=2;
}else if (MONTH<=9){
QUARTER=3;
}else if (MONTH<=12){
QUARTER=4;
}
dateList.add(YEAR+"年"+QUARTER+"季度");
}
}
Collections.reverse(dateList);
return dateList;
}
return null;
}
/**
* 获取目标开始结束时间区间半年度List
* @param startDateStr
* @param endDateStr
* @return java.util.List<java.lang.String> 2021年下半年
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getHalfYearDateList(String startDateStr, String endDateStr)throws Exception{
Date startDate = shortSdf.parse(startDateStr);
Date endDate = shortSdf.parse(endDateStr);
List<String> dateList = new ArrayList<>();
if(startDate!=null&&endDate!=null&&!endDate.before(startDate)){
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
int SYEAR = startCalendar.get(Calendar.YEAR);
int SMONTH = startCalendar.get(Calendar.MONTH) + 1;
String SHALFYEAR="";
if (SMONTH<=6){
SHALFYEAR="上半年";
}else if (SMONTH<=12){
SHALFYEAR="下半年";
}
dateList.add(SYEAR+"年"+SHALFYEAR);
while(startDate.before(endDate)){
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
calendar.set(Calendar.DATE, 1);
calendar.add(Calendar.MONTH, 7);
calendar.add(Calendar.DATE, -1);
startDate = calendar.getTime();
if (startDate.before(endDate)){
int YEAR = calendar.get(Calendar.YEAR);
int MONTH = calendar.get(Calendar.MONTH) + 1;
String HALFYEAR="";
if (MONTH<=6){
HALFYEAR="上半年";
}else if (MONTH<=12){
HALFYEAR="下半年";
}
dateList.add(YEAR+"年"+HALFYEAR);
}
}
Collections.reverse(dateList);
return dateList;
}
return null;
}
/**
* 获取目标开始结束时间区间年度List
* @param startDateStr
* @param endDateStr
* @return java.util.List<java.lang.String> 2022年
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getYearDateList(String startDateStr, String endDateStr)throws Exception{
Date startDate = shortSdf.parse(startDateStr);
Date endDate = shortSdf.parse(endDateStr);
List<String> dateList = new ArrayList<>();
if(startDate!=null&&endDate!=null&&!endDate.before(startDate)){
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
int SYEAR = startCalendar.get(Calendar.YEAR);
dateList.add(SYEAR+"年");
while(startDate.before(endDate)){
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
calendar.set(Calendar.DATE, 1);
calendar.set(Calendar.MONTH, 0);
calendar.add(Calendar.YEAR, 2);
calendar.add(Calendar.DATE, -1);
startDate = calendar.getTime();
if (startDate.before(endDate)){
int YEAR = calendar.get(Calendar.YEAR);
dateList.add(YEAR+"年");
}
}
Collections.reverse(dateList);
return dateList;
}
return null;
}
/**
* 获取目标开始结束时间区间
* @param startDateStr
* @param endDateStr
* @param dateTimeType
* @return java.util.List<java.lang.String>
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getDateList(String startDateStr, String endDateStr,String dateTimeType){
List<String> dateList = new ArrayList<>();
try {
if (StringUtils.isNotBlank(dateTimeType)){
switch (dateTimeType) {
case "month":
dateList = getMonthDateList(startDateStr, endDateStr);
break;
case "quarter":
dateList = getQuarterDateList(startDateStr, endDateStr);
break;
case "half_year":
dateList = getHalfYearDateList(startDateStr, endDateStr);
break;
case "year":
dateList = getYearDateList(startDateStr, endDateStr);
break;
default:
throw new IllegalStateException("Unexpected value: " + dateTimeType);
}
}
} catch (Exception e) {
return dateList;
}
return dateList;
}
/**
* 获取月字符串的年,月
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getMonthStrList(String DateStr) {
List<String> dateList = new ArrayList<>();
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月");
Date parse = simpleDateFormat.parse(DateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse);
dateList.add(String.valueOf(calendar.get(Calendar.YEAR)));
dateList.add(String.valueOf(calendar.get(Calendar.MONTH) + 1));
} catch (ParseException e) {
dateList.add(null);
dateList.add(null);
}
return dateList;
}
/**
* 获取季字符串的年,月
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getQuarterStrList(String DateStr) {
List<String> dateList = new ArrayList<>();
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM季度");
Date parse = simpleDateFormat.parse(DateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse);
dateList.add(String.valueOf(calendar.get(Calendar.YEAR)));
dateList.add(String.valueOf((calendar.get(Calendar.MONTH) + 1)*3));
} catch (ParseException e) {
dateList.add(null);
dateList.add(null);
}
return dateList;
}
/**
* 获取半年字符串的年,月
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getHalfYearStrList(String DateStr) {
List<String> dateList = new ArrayList<>();
String[] strs = DateStr.split("年");
dateList.add(String.valueOf(strs[0]));
dateList.add(strs[1].equals("上半")?"1":"7");
return dateList;
}
/**
* 获取年字符串的年,月
* @author guochao.bj@fang.com
* @date 2022/1/4
*/
public static List<String> getYearStrList(String DateStr) {
List<String> dateList = new ArrayList<>();
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年");
Date parse = simpleDateFormat.parse(DateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse);
dateList.add(String.valueOf(calendar.get(Calendar.YEAR)));
dateList.add(String.valueOf(1));
} catch (ParseException e) {
dateList.add(null);
dateList.add(null);
}
return dateList;
}
public static List<String> getDateStrList(String DateStr,String dateTimeType){
List<String> dateList = new ArrayList<>();
try {
if (StringUtils.isNotBlank(dateTimeType)){
switch (dateTimeType) {
case "month":
dateList = getMonthStrList(DateStr);
break;
case "quarter":
dateList = getQuarterStrList(DateStr);
break;
case "half_year":
dateList = getHalfYearStrList(DateStr);
break;
case "year":
dateList = getYearStrList(DateStr);
break;
default:
throw new IllegalStateException("Unexpected value: " + dateTimeType);
}
}
} catch (Exception e) {
return dateList;
}
return dateList;
}
public static void main(String[] args) {
try {
System.out.println(getYearStrList("2021年"));
}catch (Exception e){
e.printStackTrace();
}
}
}