#博学谷IT学习技术支持#
文章目录
Java日期计算方法
提示:以下是本篇文章正文内容,下面案例可供参考
1.参数的日期加指定的年、月、日
代码如下(示例):
/**
* @Description 参数的日期加指定的年
* @param date 日期
* @param year 加算的年
* @return 加算后的日期
*/
public static Date addYear(Date date, int year) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, year);
return calendar.getTime();
}
/**
* @Description 参数的日期加指定的月
* @param date 日期
* @return 指定的月
* @return 加算后的日期
*/
public static Date addMonth(Date date, int month) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, month);
return calendar.getTime();
}
/**
* @Description 参数的日期加指定的日
* @param date 日期
* @return 指定的日
* @return 加算后的日期
*/
public static Date addDay(Date date, int day) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, day);
return calendar.getTime();
}
2.参数的日期加指定的时、分、秒
代码如下(示例):
/**
* @Description 参数的日期加指定的时
* @param date 日期
* @param hour 加算的时
* @return 加算后的日期
*/
public static Date addHour(Date date, int hour) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY, hour);
return calendar.getTime();
}
/**
* @Description 参数的日期加指定的分
* @param date 日期
* @param min 加算的分
* @return 加算后的日期
*/
public static Date addMinute(Date date, int min) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, min);
return calendar.getTime();
}
/**
* @Description 参数的日期加指定的分
* @param date 日期
* @param second 加算的秒
* @return 加算后的日期
*/
public static Date addSecond(Date date, int second) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.SECOND, second);
return calendar.getTime();
}
3.从日期FROM到日期TO的天数
代码如下(示例):
/**
* @Description 从日期FROM到日期TO的天数
* @param dateStrFrom 日期FROM("yyyy-MM-dd")
* @param dateStrTo 日期TO("yyyy-MM-dd")
* @return int 天数
*/
public static int getDaysIn2Day(String dateStrFrom, String dateStrTo) {
if (StringUtils.isEmpty(dateStrFrom) || StringUtils.isEmpty(dateStrTo)) {
return 0;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar fromCalendar = Calendar.getInstance();
Calendar toCalendar = Calendar.getInstance();
try {
fromCalendar.setTime(sdf.parse(dateStrFrom.trim()));
toCalendar.setTime(sdf.parse(dateStrTo.trim()));
} catch (ParseException ex) {
throw new RuntimeException(ex);
}
long day = (toCalendar.getTime().getTime() - fromCalendar.getTime().getTime()) / (24 * 60 * 60 * 1000);
return ConvUtils.convToInt(day);
}
4.参数的日期加指定的工作日
/**
* @Description 参数的日期加指定的工作日(不排除节假日)
* @param startDate 开始日期
* @param workDay 工作日天数(周一到周五)
* @return 加算后的日期
*/
public static String getWorkDay(Date startDate, int workDay) {
Calendar c1 = Calendar.getInstance();
c1.setTime(startDate);
for (int i = 0; i < workDay; i++) {
c1.set(Calendar.DATE, c1.get(Calendar.DATE) - 1);
if (Calendar.SATURDAY == c1.get(Calendar.SATURDAY) || Calendar.SUNDAY == c1.get(Calendar.SUNDAY)) {
workDay = workDay + 1;
c1.set(Calendar.DATE, c1.get(Calendar.DATE) - 1);
continue;
}
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
c1.set(Calendar.DATE, c1.get(Calendar.DATE) +1);
return df.format(c1.getTime());
}
/**
* @Description 参数的日期加指定的工作日(排除节假日)
* @param startDate 开始日期
* @param timeout 加的工作日(节假日不算)
* @return 加算后的日期
*/
public static Map<String, Object> getWorkDays(Date nowTime, int timeout) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(nowTime);
int year = calendar.get(Calendar.YEAR);
String s = HttpsUtils.sendSSLRequest("http://timor.tech/api/holiday/year/" + year, Maps.newHashMap(), HttpsUtils.Method_GET);
Map map = JsonUtils.deserialize(s, Map.class);
Map holiday = (Map) map.get("holiday");
int timeouts = 0;
String lastTime ="";
String week = "";
for (int i = 1; i <= timeout; i++) {
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
lastTime = sdf.format(addDay(nowTime, i));
if (holiday.get(lastTime) != null) {
Map ts = (Map) holiday.get(lastTime);
if (ConvUtils.convToBool(ts.get("holiday"))) {
timeouts++;
timeout++;
};
} else {
//判断是否为周六周日
week = getWeek(addDay(nowTime, i));
if (week.equals("星期六") || week.equals("星期日")) {
timeouts++;
timeout++;
}
};
}
Map<String, Object> maps = Maps.newHashMap();
//工作日后实际日期:
maps.put("lastTime",lastTime);
//实际天数
maps.put("timeout",timeout);
//节假日天数
maps.put("timeouts",timeouts);
return maps;
}
/**
* @Description 根据日期获取得文字 星期几
* @param startDate date
* @return 例子:星期一
*/
public static String getWeek(Date date){
String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
if(week_index<0){
week_index = 0;
}
return weeks[week_index];
}
public static void main(String[] args) {
System.out.println(getWorkDays(new Date(),7));;
}
查询国家法定节假日接口
接口查询参数:
总结
以上简单的总结了几种Java中常用的日期计算,希望能对于大家有所帮助,谢谢!