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

639 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}