Examination_system/Examination_system-1/.svn/pristine/ee/ee890021c62cff865f9d7bbebb3...

639 lines
15 KiB
Plaintext
Raw Normal View History

2023-10-30 13:10:40 +08:00
package com.bonus.core;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 时间操作类
*
* @author cshu
*
*/
@SuppressWarnings("deprecation")
public class DateTimeHelper {
public static String currentDateTimeAddOrSub(String fmt){
String[] st = null;
String s = "";
if(fmt.indexOf(" ") == -1){
s = "yyyy-MM-dd";
st = fmt.split("-");
}else{
st = new String[6];
s = "yyyy-MM-dd HH:mm:ss";
st = fmt.split(" |-|:");
}
SimpleDateFormat sdf = new SimpleDateFormat(s);//格式化输出日期
Date dt = null;
try {
dt = sdf.parse(currentDateTime());
} catch (ParseException e) {
e.printStackTrace();
}
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(dt);
for(String b : st){
if(b.indexOf("}") >=0){
b = b.replaceAll("}","");
b = b.substring(1);
if(b.indexOf("y")>=0){
b = b.replaceAll("%y","");
rightNow.add(Calendar.YEAR,Integer.parseInt(b));
}else if(b.indexOf("M")>=0){
b = b.replaceAll("%M","");
rightNow.add(Calendar.MONTH,Integer.parseInt(b));
}else if(b.indexOf("d")>=0){
b = b.replaceAll("%d","");
rightNow.add(Calendar.DAY_OF_YEAR,Integer.parseInt(b));
}else if(b.indexOf("h")>=0){
b = b.replaceAll("%h","");
rightNow.add(Calendar.HOUR_OF_DAY,Integer.parseInt(b));
}else if(b.indexOf("m")>=0){
b = b.replaceAll("%m","");
rightNow.add(Calendar.MINUTE,Integer.parseInt(b));
}else if(b.indexOf("s")>=0){
b = b.replaceAll("%s","");
rightNow.add(Calendar.SECOND,Integer.parseInt(b));
}
}
}
Date dt1=rightNow.getTime();
String reStr = sdf.format(dt1);
return reStr;
}
/**
* 获取当前时间的年份
*
* @return
*/
public static String getNowYear() {
return format(new Date(), "yyyy");
}
public static String dateFormat(String date) {
if(StringHelper.isNotEmpty(date)){
String[] split = date.split("-");
return split[0]+"年"+split[1]+"月"+split[2]+"日";
}
return "";
}
public static String getNowMonthAndDay() {
return format(new Date(), "MM-dd");
}
public static String getYear(Date d) {
int year = d.getYear() + 1900;
return year + "";
}
public static String getMonth(Date d) {
int month = d.getMonth() + 1;
return StringHelper.fillPrefixZero(month, 2);
}
/**
* 格式化 时间
*
* @param format
* @return
*/
public static String format(Date d, String format) {
SimpleDateFormat df = new SimpleDateFormat(format);
return df.format(d);
}
public static String format(String str, String format, String disFormat) {
Date d = parse(str, format);
return format(d, disFormat);
}
/**
* 格式化 时间
* @param format
* @return
*/
public static String currentDateTime() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df.format(new Date());
}
public static String currentDateTimedetail() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
return df.format(new Date());
}
/**
* 格式化 时间
*
* @param format
* @return
*/
public static String format(Date d, DateFormat format) {
return format.format(d);
}
/**
* 判断时间状态
*
* @param format
* @return
*/
public static Integer checkDateStatus(String startTime,String endTime) {
Integer status = 2;
try {
Date start = new SimpleDateFormat("yyyy-MM-dd").parse(startTime);
Date end = new SimpleDateFormat("yyyy-MM-dd").parse(endTime);
Date date = new Date();
String nowStr = new SimpleDateFormat("yyyy-MM-dd").format(date);
Date now = new SimpleDateFormat("yyyy-MM-dd").parse(nowStr);
if(now.before(start)) {
status = 1;
}
if(now.after(end)) {
status = 3;
}
} catch (ParseException e) {
e.printStackTrace();
}
return status;
}
/**
* 判断时间状态
*
* @param format
* @return
*/
public static Boolean isStartApply(String startTime) {
Boolean status = false;
if(StringHelper.isEmpty(startTime)) {
return false;
}
try {
Date start = new SimpleDateFormat("yyyy-MM-dd").parse(startTime);
Date date = new Date();
String nowStr = new SimpleDateFormat("yyyy-MM-dd").format(date);
Date now = new SimpleDateFormat("yyyy-MM-dd").parse(nowStr);
if(!now.before(start)) {
status = true;
}
} catch (ParseException e) {
e.printStackTrace();
}
return status;
}
/**
* 格式化 时间
*
* @param format
* @return Date
* @throws ParseException
*/
public static Date parse(String dateStr, String format) {
SimpleDateFormat df = new SimpleDateFormat(format);
try {
return df.parse(dateStr);
} catch (ParseException e) {
return new Date();
}
}
public static Date parse(String dateStr, String format, Date d) {
try {
SimpleDateFormat df = new SimpleDateFormat(format);
return df.parse(dateStr);
} catch (Exception e) {
return d;
}
}
/**
* 解析时间
*
* @param String
* @param DateFormat
* @return Date
* @throws ParseException
*/
public static Date parse(String dateStr, DateFormat format) throws ParseException {
return format.parse(dateStr);
}
public static Date parseDate(String dateStr) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(dateStr);
}
/**
* 获取当前时间的年月
*
* @return
*/
public static String getPrevMonth() {
return minusMonth(new Date(), 1);
}
/**
* 获取当前时间的上个年月
*
* @return
*/
public static String getNowMonth() {
return format(new Date(), "yyyy-MM");
}
/**
* 获取当前时间的上个年月格式化
*
* @return
*/
public static String getNowMonthFomart() {
return format(new Date(), "yyyyMM");
}
/**
* 获取当前时间的上一个月
*
* @return
*/
public static String getPreMonthDate() {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date); // 设置为当前时间
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); // 设置为上一个月
date = calendar.getTime();
return format(date, "yyyy-MM-dd");
}
/**
* 获取当前时间的前两个月
*
* @return
*/
public static String getTwoMonthDate() {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date); // 设置为当前时间
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 2); // 设置为前两个月
date = calendar.getTime();
return format(date, "yyyy-MM-dd");
}
/**
* 获取当前时间的年月日
*
* @return
*/
public static String getNowDate() {
return format(new Date(), "yyyy-MM-dd");
}
public static String getNowDateFomart() {
return format(new Date(), "yyyyMMdd");
}
/**
* 明年的昨天
* @param dateStr
* @return
*/
public static String getNextYearDate(String dateStr) {
Date date = parse(dateStr, "yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.YEAR, 1);
c.add(Calendar.DAY_OF_MONTH, -1);
return format(c.getTime(), "yyyy-MM-dd");
}
/**
* 获取明天时间的年月日
*
* @return
*/
public static String getTomorrowDate(String nowDate) {
Date date = parse(nowDate, "yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, 1);
return format(c.getTime(), "yyyy年MM月dd日");
}
/**
* 获取当前时间
*
* @return
*/
public static String getNowTime() {
return format(new Date(), "yyyy-MM-dd HH:mm:ss");
}
public static String getNowTimeFomart() {
return format(new Date(), "yyyyMMddHHmmss");
}
public static String getNextYear() {
return format(new Date(), "yyyy-MM-dd HH:mm:ss");
}
/**
*
* @param month
* @param dates
* @return
*/
public static String minusMonth(Date date, int c) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
try {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -c);
return format(cal.getTime(), df);
} catch (Exception e) {
return format(date, df);
}
}
/**
*
* @param month
* @param dates
* @return
*/
public static String minusMonth(String month, int c) {
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM");
Date date = parse(month, df);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -c);
return format(cal.getTime(), df);
} catch (Exception e) {
return month;
}
}
/**
*
* @param month
* @param dates
* @return
*/
public static Date minus(Date d, int type, int c) {
try {
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.add(type, -c);
return cal.getTime();
} catch (Exception e) {
return new Date();
}
}
/**
* 得到前一个月
*
* @param month
* @return
*/
public static String prevMonth(String month) {
return minusMonth(month, 1);
}
/**
* 得到前一个月
*
* @param month
* @return
*/
public static String prevMonth(String month, int c) {
return minusMonth(month, c);
}
public static float duration(String startTime, String stopTime) {
Date sd = DateTimeHelper.parse(startTime, "yyyy-MM-dd HH:mm");
long sl = sd.getTime();
Date ed = DateTimeHelper.parse(stopTime, "yyyy-MM-dd HH:mm");
long el = ed.getTime();
float l = el - sl;
if (l <= 0) {
l = 0;
}
l = l / (1000 * 60);
return l;
}
public static String getStartYearMonthBySeason(String year, int season) {
switch (season) {
case 1:
return getYearMonth(year, "01");
case 2:
return getYearMonth(year, "04");
case 3:
return getYearMonth(year, "07");
case 4:
return getYearMonth(year, "10");
default:
return getYearMonth(year, "01");
}
}
private static String getYearMonth(String year, String month) {
return year + "-" + month;
}
public static String getEndYearMonthBySeason(String year, int season) {
switch (season) {
case 1:
return getYearMonth(year, "03");
case 2:
return getYearMonth(year, "06");
case 3:
return getYearMonth(year, "09");
case 4:
return getYearMonth(year, "12");
default:
return getYearMonth(year, "03");
}
}
public static String getAddNumDay(String giveTime, int addDay) {
String time = giveTime;
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
try {
date = sdf.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, +addDay);// +1今天的时间加一天
date = calendar.getTime();
time = sdf.format(date);
return time;
}
/**
* date2比date1多的天数
*
* @param date1
* @param date2
* @return
*/
public static int differentDays(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1 = cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if (year1 != year2) // 同一年
{
int timeDistance = 0;
for (int i = year1; i < year2; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) // 闰年
{
timeDistance += 366;
} else // 不是闰年
{
timeDistance += 365;
}
}
return timeDistance + (day2 - day1);
} else // 不同年
{
// System.out.println("判断day2 - day1 : " + (day2 - day1));
return day2 - day1;
}
}
/**
* 通过时间秒毫秒数判断两个时间的间隔
*
* @param date1
* @param date2
* @return
*/
public static int differentDaysByMillisecond(Date date1, Date date2) {
int days = (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
return days;
}
public static int calcDate(String dateStr, String dateStr2) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = format.parse(dateStr);
Date date2 = format.parse(dateStr2);
return DateTimeHelper.differentDays(date, date2);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
private static final int invalidAge = -1;//非法的年龄,用于处理异常。
/**
*根据身份证号码计算年龄
* idNumber 考虑到了15位身份证但不一定存在
*/
public static int getAgeByIDNumber(String idNumber) {
String dateStr;
if (idNumber.length() == 15) {
dateStr = "19" + idNumber.substring(6, 12);
} else if (idNumber.length() == 18) {
dateStr = idNumber.substring(6, 14);
} else {//默认是合法身份证号,但不排除有意外发生
return invalidAge;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
try {
Date birthday = simpleDateFormat.parse(dateStr);
return getAgeByDate(birthday);
} catch (ParseException e) {
return invalidAge;
}
}
/**
*根据生日计算年龄
* dateStr 这样格式的生日 1990-01-01
*/
public static int getAgeByDateString(String dateStr) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date birthday = simpleDateFormat.parse(dateStr);
return getAgeByDate(birthday);
} catch (ParseException e) {
return -1;
}
}
public static int getAgeByDate(Date birthday) {
Calendar calendar = Calendar.getInstance();
//calendar.before()有的点bug
if (calendar.getTimeInMillis() - birthday.getTime() < 0L) {
return invalidAge;
}
int yearNow = calendar.get(Calendar.YEAR);
int monthNow = calendar.get(Calendar.MONTH);
int dayOfMonthNow = calendar.get(Calendar.DAY_OF_MONTH);
calendar.setTime(birthday);
int yearBirthday = calendar.get(Calendar.YEAR);
int monthBirthday = calendar.get(Calendar.MONTH);
int dayOfMonthBirthday = calendar.get(Calendar.DAY_OF_MONTH);
int age = yearNow - yearBirthday;
if (monthNow <= monthBirthday && monthNow == monthBirthday && dayOfMonthNow < dayOfMonthBirthday || monthNow < monthBirthday) {
age--;
}
return age;
}
}