快速获取当天0点0分0秒(00:00:00),23点59分59秒(23:59:59) | 不羁鱼Karle-CSDN
Java中Calendar基本使用 | 谷半仙-CSDN
Calendar | Elven_Shi-OSCHINA
日历字段 | Value |
---|---|
YEAR | 当前年份 |
MONTH | 当前月份( 注:初始值是从0开始,所以得到的比实际月份小1月) |
DATE | 一个月中的某天 |
WEEK_OF_YEAR | 当前年中的第几个星期 |
WEEK_OF_MONTH | 当前月中的第几个星期 |
DAY_OF_MONTH | 一个月中的第几天 |
DAY_OF_YEAR | 一年中的第几天 |
DAY_OF_WEEK | 一个星期中的第几天 |
DAY_OF_WEEK_IN_MONTH | 当前月中的第几个星期(注:当前月第1-7天是第一个星期,8-14是第二个星期,以此类推) |
HOUR_OF_DAY | 一天中的第几个小时 |
MINUTE | 一小时中的第几分钟 |
SECOND | 一分钟中的第几秒 |
MILLISECOND | 一秒中的第几毫秒 |
Calendar cal = Calendar.getInstance();
//查看上表的字段给KKK赋值
cal.get(Calendar.KKK);
//例如
cal.get(Calendar.DATE); //当天 1-31
cal.getMaximum(Calendar.DATE); //这个月的天数
cal.getMinimum(Calendar.DATE); //这个月第一提案
// 对以上每个字段进行赋值,代码重复较大
cal.set(Calendar.KKK, VVVV);
// 分别对字段进行赋值,效率高
cal.set(year,month,date,hour,minute,second);
//一般不使用,原因是该方法只在一个月里面循环计算,其大小不会超过该月最值
cal1.roll(Calendar.KKK,VVV);
//使用 XX_OF_XX 的field进行加减计算效果更佳,而且计算准确
cal1.add(Calendar.KKK,VVV);
关于add的计算:
例子1:获取下个月第1天。
先调到下个月:cal1.add(Calendar.MONTH, 1);
如果当前为5-31,那么,加一个月的话就是6-30;
设置为这个月中的第1天: cal.set(Calendar.DAY_OF_MONTH, 1);
例子2:获取下个月最后1天。
先调到下2个月:cal1.add(Calendar.MONTH, 2);
设置为这个月中的第0天: cal.set(Calendar.DAY_OF_MONTH, 0);
理解为:下2个月的第1天 - 1天 = 下个月最后1天
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
//计算日期工具类
@Component
public class DateUtils {
//获得下个月的天数
public static int getNextMonthDays() {
//获取下月的第一天
Calendar calendar = Calendar.getInstance();
//调到下个月
calendar.add(Calendar.MONTH, 1);
//下个月的天数
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
return days;
}
//根据下个月第几天获得该天的日期
public static Date getNextMonthByDay(int day) {
//获取下月的第一天
Calendar calendar = Calendar.getInstance();
//获取下个月的那一天
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, day, 0, 0, 0);
// cal.set(Calendar.DAY_OF_MONTH, day);
Date date = calendar.getTime();
return date;
}
//获得下个月第一天和最后一天的日期
public static Date getFirstDate() {
//获取下月的第一天0点0分0秒
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, 0, 23, 59, 59);
Date firstDate = calendar.getTime();
return firstDate;
}
//获取下月的最后一天23点59分59秒
public static Date getLastDate() {
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 2, 0, 23, 59, 59);
Date lastDate = calendar.getTime();
return lastDate;
}
//计算日期 value +1代表日期的第二天 -1代表这个日期的前一天 以此类推
public static String calculateDate(String scheduleDate, Integer value) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
//获取那天日期
Date date = simpleDateFormat.parse(scheduleDate);
//获取那天
calendar.setTime(date);
//获取那天的明天
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE) + value, 0, 0, 0);
//转化为String类型
String tomorrow = simpleDateFormat.format(calendar.getTime());
return tomorrow;
}
}
public static void main(String[] args) {
//测试方法1
int nextMonthDays = getNextMonthDays();
System.out.println("下个月的天数是:" + nextMonthDays);
//测试方法2
int day = 3;
Date nextMonthByDay = getNextMonthByDay(day);
System.out.println("下个月的第" + day + "天是:" + nextMonthByDay);
//测试方法3
Date firstDate = getFirstDate();
System.out.println("下个月的第一天是:" + firstDate);
//测试方法4
Date lastDate = getLastDate();
System.out.println("下个月的第最后一天是:" + lastDate);
//测试方法5
int value = 2;
String date = calculateDate("2022-01-01", value);
System.out.println("日期:2022-01-01过" + value + "天,日期变为:" + date);
}
实体类
@JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
private Date startDate;//请假开始日期
@JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
private Date endDate;//请假结束日期
方法
//计算日期差
private Integer getDuration(Date startDate, Date endDate){
//计算日期差
long difParse = endDate.getTime() - startDate.getTime();
//例如:1月1号请假开始 到 1月1号请假结束,算是一天,所以+1
Integer result = Math.toIntExact(difParse / (24 * 60 * 60 * 1000) + 1);
return result;
}
实体类
@JsonFormat(pattern="HH:mm:ss")
private Date startTime;//班次开始时间
@JsonFormat(pattern="HH:mm:ss")
private Date endTime;//班次结束时间
方法
//计算时间差
private double getDuration(Date startTime, Date endTime){
//如果下班时间小于上时间,代表下班为第二天,则需要将在原时间加上24小时,即一天
if (endTime.before(startTime)) {//比较上班和下班时间,如果下班时间小于上班时间
Calendar calendar = Calendar.getInstance();
calendar.setTime(endTime);//设置时间
calendar.add(Calendar.DATE, 1);//在该时间加上一天
endTime = calendar.getTime();//新的下班日期
}
long result = endTime.getTime() - startTime.getTime();//计算时间差
double duration = result / (1000.0 * 60 * 60);//转化为小时
return duration;
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MMd-d");
boolean equals = format.format(date1).equals(format.format(date2));