package com.rdmu.schedulingmeetingplace.common;
import org.hibernate.annotations.SourceType;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* Calendar操作Date
*/
public class Test {
/**设置初始值*/
private static Calendar cal;
/**
* 根据当前系统时区定义Calendar
*/
static {
cal = Calendar.getInstance();
}
/**
* Date-->String 转换
* @param date
* @return
*/
public static String dateToString(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
/**
* 获取指定日期在一周中的第几天
* @param date
*/
public static void getDayOfWeek(Date date){
int dayOfWeek = cal.DATE;
System.out.println(dayOfWeek);
}
/**
* 获取指定日期是月中的第几天
* @param date
*/
public static void getDayOfMonth(Date date){
int day = date.getDate();
System.out.println(day);
}
/**
* 获取指定时间所在月份
* @param date
*/
public static void getMonth(Date date){
cal.setTime(date);
//老外计算月份从0开始,转换为国内月份需要加1
int month = cal.get(cal.MONTH) + 1;
System.out.println(month);
}
/**
* 获取指定时间所在周的周一(一天中最小时间)和周天(一天中最大时间)
* @param date
*/
public static void getFristAndLashOfWeekDay(Date date){
cal.setTime(date);
cal.set(cal.DAY_OF_WEEK,cal.MONDAY);
Date mondayOld = cal.getTime();
//老外的一周从周天开始,使用cal.SUNDAY获取到的是上周的周天
cal.set(cal.DAY_OF_WEEK,cal.SATURDAY);
//获取周六,加上一天的毫秒数,计算所在周周天,
cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000);
Date sundayOld = cal.getTime();
//考虑到使用判断获取数据时存在部分数据不显示问题,逐将日期格式化处理
Date mondayNew = mondayOld;
Date sundayNew = sundayOld;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
mondayNew = sdf.parse(sdf.format(mondayOld));
cal.setTime(sdf.parse(sdf.format(sundayOld)));
//用日期获取数据时会由1秒误差,若要求比较严格,建议不减1,获取下一天的开始时间
cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1);
sundayNew = cal.getTime();
} catch (ParseException e) {
e.printStackTrace();
System.out.println("执行类:" + Test.class + "中方法:getStartAndEndWeekDay(Date date) 异常");
}
System.out.println(mondayNew);
System.out.println(String.valueOf(sundayNew));
}
/**
* 获取指定时间所在月的第一天(一天中最小时间)和最后一天(一天中最大时间)
* @param date
*/
public static void getFristAndLashOfMonthDay(Date date){
cal.setTime(date);
cal.set(cal.DAY_OF_MONTH,1);
Date firstDay = cal.getTime();
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
Date lastDay = cal.getTime();
//考虑到使用判断获取数据时存在部分数据不显示问题,逐将日期格式化处理
Date firstDayNew = firstDay;
Date lastDayNew = lastDay;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
firstDayNew = sdf.parse(sdf.format(firstDay));
cal.setTime(sdf.parse(sdf.format(lastDay)));
//用日期获取数据时会由1秒误差,若要求比较严格,建议不减1,获取下一天的开始时间
cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1);
lastDayNew = cal.getTime();
} catch (ParseException e) {
e.printStackTrace();
System.out.println("执行类:" + Test.class + "中方法:getFristAndLashOfMonthDay(Date date) 异常");
}
System.out.println(firstDayNew);
System.out.println(lastDayNew);
}
/**
* 获取指定时间所在季度的第一天(一天中最小时间)和最后一天(一天中最大时间)
* @param date
*/
public static void getFristAndLashOfDuarterDay(Date date){
cal.setTime(date);
int month = cal.get(cal.MONTH) + 1;
int quarter = 0;
//判断季度
if (month >= 1 && month <= 3) {
quarter = 1;
} else if (month >= 4 && month <= 6) {
quarter = 2;
} else if (month >= 7 && month <= 9) {
quarter = 3;
} else {
quarter = 4;
}
//获取指定时间所在季度第一天和最后一天
Date firstDay = null;
Date lastDay = null;
String str = String.valueOf(date.getYear());
String startDay = "";
String endDay = "";
switch (quarter){
case 1://第一季度
startDay = str + "-01-01 00:00:00";
endDay = str + "-03-31 23:59:59";
break;
case 2://第二季度
startDay = str + "-04-01 00:00:00";
endDay = str + "-06-30 23:59:59";
break;
case 3://第三季度
startDay = str + "-07-01 00:00:00";
endDay = str + "-09-30 23:59:59";
break;
case 4://第四季度
startDay = str + "-10-01 00:00:00";
endDay = str + "-12-31 23:59:59";
break;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
firstDay = sdf.parse(startDay);
//用日期获取数据时会由1秒误差,若要求比较严格,建议不减1,获取下一天的开始时间
cal.setTime(sdf.parse(endDay));
cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1);
lastDay = cal.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(dateToString(firstDay));
System.out.println(dateToString(lastDay));
}
public static void main(String[] args){
Date date = new Date(119,1,11);
System.out.println(dateToString(date));
//获取指定日期具体日
getDayOfMonth(date);
//获取指定日期是周几
getDayOfWeek(date);
//获取指定时间所在月份
getMonth(date);
//获取指定时间所在周的周一和周天
getFristAndLashOfWeekDay(date);
//获取指定时间所在月的第一天和最后一天
getFristAndLashOfMonthDay(date);
//获取指定时间所在季度第一天和最后一天
getFristAndLashOfDuarterDay(date);
}
}