该类介绍了时间的加减运算,包含获取制定日期的季度,周数,星期几,等信息
package com.aems.dispatcher.util;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.aems.sys.iservice.ICompanyService;
import com.aems.sys.iservice.ISysDateTimeService;
import com.aems.sys.iservice.ISysOrgStruService;
import com.aems.sys.iservice.ISysUserService;
import com.aems.sys.iservice.ISysWorkGroupService;
import com.aems.sys.model.SysDateTime;
/**
* 日期封装处理
* @author July_jie
*
*/
public class CalDateTime implements Comparable<CalDateTime>, Serializable {
private static final long serialVersionUID = 4715414577633839197L;
private Calendar calendar = Calendar.getInstance();
private SimpleDateFormat sdf = new SimpleDateFormat();
private final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
private final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
private final String DEFAULT_TIME_PATTERN = "HH:mm:ss";
public CalDateTime() {
}
public CalDateTime(String dateStr) {
try {
parse(dateStr);
} catch (Exception e) {
e.printStackTrace();
}
}
public CalDateTime(String dateStr, TimeZone timeZone) {
this(dateStr);
calendar.setTimeZone(timeZone);
}
public CalDateTime(String dateStr, String pattern) {
try {
parse(dateStr, pattern);
} catch (Exception e) {
e.printStackTrace();
}
}
public CalDateTime(String dateStr, String pattern, TimeZone timeZone) {
this(dateStr, pattern);
calendar.setTimeZone(timeZone);
}
public CalDateTime(int year, int month, int day, int hour, int minute, int second) {
calendar.set(year, month, day, hour, minute, second);
}
public CalDateTime(int year, int month, int day, int hour, int minute, int second, TimeZone timeZone) {
this(year, month, day, hour, minute, second);
calendar.setTimeZone(timeZone);
}
public CalDateTime(long milliSeconds) {
calendar.setTimeInMillis(milliSeconds);
}
public Calendar getCalendar() {
return calendar;
}
public void setCalendar(Calendar calendar) {
this.calendar = calendar;
}
public Date getDate() {
return calendar.getTime();
}
public void setDate(Date date) {
calendar.setTime(date);
}
public int getYear() {
return calendar.get(Calendar.YEAR);
}
public void setYear(int year) {
calendar.set(Calendar.YEAR, year);
}
public int getMonth() {
return calendar.get(Calendar.MONTH);
}
public void setMonth(int month) {
calendar.set(Calendar.MONTH, month);
}
public int getDay() {
return calendar.get(Calendar.DAY_OF_MONTH);
}
public void setDay(int dayOfMonth) {
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
}
public int getHour() {
return calendar.get(Calendar.HOUR_OF_DAY);
}
public void setHour(int hour) {
calendar.set(Calendar.HOUR_OF_DAY, hour);
}
public int getMinute() {
return calendar.get(Calendar.MINUTE);
}
public void setMinute(int minute) {
calendar.set(Calendar.MINUTE, minute);
}
public int getSecond() {
return calendar.get(Calendar.SECOND);
}
public void setSecond(int second) {
calendar.set(Calendar.SECOND, second);
}
public long getTimeInMilliSeconds() {
return calendar.getTimeInMillis();
}
public void setTimeInMilliSeconds(long milliSeconds) {
calendar.setTimeInMillis(milliSeconds);
}
public TimeZone getTimeZone() {
return calendar.getTimeZone();
}
public void setTimeZone(TimeZone timeZone) {
calendar.setTimeZone(timeZone);
}
/**
* 使用默认格式解析日期字符串
* @param dateStr
* @throws Exception
*/
public void parse(String dateStr) throws Exception {
try {
parse(dateStr, DEFAULT_DATETIME_PATTERN);
} catch (Exception e) {
try {
parse(dateStr, DEFAULT_DATE_PATTERN);
} catch (Exception e1) {
try {
parse(dateStr, DEFAULT_TIME_PATTERN);
} catch (Exception e2) {
throw new Exception("the date string [" + dateStr + "] could not be parsed");
}}}}
/**
* 使用给定模式解析日期字符串
* @param dateStr
* @param pattern
* @throws Exception
*/
public void parse(String dateStr, String pattern) throws Exception {
if (dateStr == null) {
throw new NullPointerException("date string could not be null");
}
if (pattern == null) {
throw new NullPointerException("the pattern string could not be null");
}
try {
sdf.applyPattern(pattern);
sdf.parse(dateStr);
} catch (ParseException e) {
throw new Exception("the date string [" + dateStr + "] could not be parsed with the pattern [" + pattern + "]");
}
calendar = sdf.getCalendar();
}
/**
* 格式化当前DateTime对象代表的时间
*/
public String format(String pattern) {
sdf.applyPattern(pattern);
return sdf.format(calendar.getTime());
}
/**
* 获取默认格式日期字符串
* @return
*/
public String toDateTimeString() {
sdf.applyPattern(DEFAULT_DATETIME_PATTERN);
return sdf.format(calendar.getTime());
}
public int compareTo(CalDateTime otherDateTime) {
return calendar.compareTo(otherDateTime.getCalendar());
}
/**
* 是否闰年
* @return
*/
public boolean isLeapYear() {
int year = getYear();
boolean result = false;
if (year % 100 == 0) {
if (year % 400 == 0) {
result = true;
}
} else if (year % 4 == 0) {
result = true;
}
return result;
}
/**
* 获取星期
* @return
*/
public String getDayOfWeek() {
String Dw = new String();
int i = calendar.get(Calendar.DAY_OF_WEEK);
switch(i){
case 1: Dw = "星期日";
break;
case 2: Dw = "星期一";
break;
case 3: Dw = "星期二";
break;
case 4: Dw = "星期三";
break;
case 5: Dw = "星期四";
break;
case 6: Dw = "星期五";
break;
case 7: Dw = "星期六";
break;
}
return Dw;
}
public int getDayOfWeek1() {
int Dw = 0;
int i = calendar.get(Calendar.DAY_OF_WEEK);
switch(i){
case 1: Dw = 0;
break;
case 2: Dw = 1;
break;
case 3: Dw = 2;
break;
case 4: Dw = 3;
break;
case 5: Dw = 4;
break;
case 6: Dw = 5;
break;
case 7: Dw = 6;
break;
}
return Dw;
}
/**
* 获取下周一日期
* @return
*/
public int getNextMonday() {
int i = calendar.get(Calendar.DAY_OF_WEEK);
int d = 0;
switch(i){
case 1:d=1;
break;
case 2:d=7;
break;
case 3:d=6;
break;
case 4:d=5;
break;
case 5:d=4;
break;
case 6:d=3;
break;
case 7:d=2;
break;
}
return d;
}
/**
* 是否周末
* @return
*/
public boolean isWeekend() {
String dayOfWeek = getDayOfWeek();
return dayOfWeek == "星期日" || dayOfWeek == "星期一";
}
/**
* 当前DateTime对象月份天数
* @return
*/
public int getDayNumsInMonth() {
Calendar c = (Calendar) calendar.clone();
c.set(Calendar.DAY_OF_MONTH, 1);
c.roll(Calendar.DAY_OF_MONTH, -1);
return c.get(Calendar.DAY_OF_MONTH);
}
/**
* 两个日期之间间隔天数
* @param otherDateTime
* @return
*/
public int dayNumFrom(CalDateTime otherDateTime) {
long millis = Math.abs(getTimeInMilliSeconds() - otherDateTime.getTimeInMilliSeconds());
int days = (int) Math.floor(millis / 86400000);
return days;
}
public boolean lessThan(CalDateTime otherDateTime) {
return compareTo(otherDateTime) < 0;
}
public boolean greaterThan(CalDateTime otherDateTime) {
return compareTo(otherDateTime) > 0;
}
public boolean equal(CalDateTime otherDateTime) {
return compareTo(otherDateTime) == 0;
}
/**
* 当前时间基础上增加秒数(负数时为减)
* @param amount
*/
public void plusSecond(int amount) {
calendar.add(Calendar.SECOND, amount);
}
public void plusMinute(int amount) {
calendar.add(Calendar.MINUTE, amount);
}
public void plusHour(int amount) {
calendar.add(Calendar.HOUR, amount);
}
public void plusDays(int amount) {
calendar.add(Calendar.DAY_OF_MONTH, amount);
}
public void plusMonth(int amount) {
calendar.add(Calendar.MONTH, amount);
}
public void plusYear(int amount) {
calendar.add(Calendar.YEAR, amount);
}
public void plus(int year, int month, int day, int hour, int minute, int second) {
plusYear(year);
plusMonth(month);
plusDays(day);
plusHour(hour);
plusMinute(minute);
plusSecond(second);
}
/**
* 获取一周的日期
* @param mdate
* @return
*/
public List<Date> dateToWeek(Date mdate) {
SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
String date = dateFormat.format(mdate);
CalDateTime dateTime = new CalDateTime(date);
int b = dateTime.getDayOfWeek1();
Date fdate;
List<Date> list = new ArrayList<Date>();
Long fTime = mdate.getTime() - b * 24 * 3600000;
for (int a = 1; a <= 7; a++) {
fdate = new Date();
fdate.setTime(fTime + (a * 24 * 3600000));
calendar.setTime(fdate);
calendar.set(Calendar.HOUR_OF_DAY, 0);
//设置当前时刻的分钟为0
calendar.set(Calendar.MINUTE, 0);
//设置当前时刻的秒钟为0
calendar.set(Calendar.SECOND, 0);
//设置当前的毫秒钟为0
calendar.set(Calendar.MILLISECOND, 0);
list.add(a-1, calendar.getTime());
}
return list;
}
/**
* 获取当前时间是本年的第几周
* @param mdate
* @return
*/
public int weekOfYear(Date mdate){
calendar.setTime(mdate);
return calendar.get(Calendar.WEEK_OF_YEAR);
}
/**
* 当前第几季度
* @param date
* @return
*/
public int getSeason(Date date) {
int season = 0;
Calendar c = Calendar.getInstance();
c.setTime(date);
int month = c.get(Calendar.MONTH);
switch (month) {
case Calendar.JANUARY:
case Calendar.FEBRUARY:
case Calendar.MARCH:
season = 1;
break;
case Calendar.APRIL:
case Calendar.MAY:
case Calendar.JUNE:
season = 2;
break;
case Calendar.JULY:
case Calendar.AUGUST:
case Calendar.SEPTEMBER:
season = 3;
break;
case Calendar.OCTOBER:
case Calendar.NOVEMBER:
case Calendar.DECEMBER:
season = 4;
break;
default:
break;
}
return season;
}
/**
* 获取某段时间内的所有日期
* @param dBegin
* @param dEnd
* @return
*/
public List<Date> findDates(Date dBegin, Date dEnd)
{
List<Date> lDate = new ArrayList<Date>();
lDate.add(dBegin);
Calendar calBegin = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calBegin.setTime(dBegin);
Calendar calEnd = Calendar.getInstance();
// 使用给定的 Date 设置此 Calendar 的时间
calEnd.setTime(dEnd);
// 测试此日期是否在指定日期之后
while (dEnd.after(calBegin.getTime()))
{
// 根据日历的规则,为给定的日历字段添加或减去指定的时间量
calBegin.add(Calendar.DAY_OF_MONTH, 1);
lDate.add(calBegin.getTime());
}
return lDate;
}
/**
* 获取时间表日期
* @param mdate
* @throws ParseException
*/
public void dateTime(Date mdate) throws ParseException{
String[] strs = {"第一季度","第二季度","第三季度","第四季度"};
SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date = dateFormat.format(mdate);
CalDateTime dateTime = new CalDateTime(date);
CalDateTime year = new CalDateTime(date);
System.out.println("年-输出:" + year.format("yyyy"));
CalDateTime yearMot = new CalDateTime(date);
System.out.println("年月-输出:" + yearMot.format("yyyy-MM"));
CalDateTime MM = new CalDateTime(date);
System.out.println("月-输出:" + MM.format("M"));
CalDateTime Day = new CalDateTime(date);
System.out.println("日-输出:" + Day.format("d"));
System.out.println("第几季度:"+getSeason(mdate));
System.out.println("星期几:"+ dateTime.getDayOfWeek());
System.out.println("第几周:"+weekOfYear(mdate));
}
public static void main(String[] args) throws Exception {
Calendar cal = Calendar.getInstance();
CalDateTime dateTime = new CalDateTime();
CalDateTime dateTime2 = new CalDateTime("2016-05-30 05:00:00");
System.out.println("默认格式输出:" + dateTime.toDateTimeString());
System.out.println("是否闰年:" + dateTime.isLeapYear());
System.out.println("自定义格式输出:" + dateTime2.format("yyyy-MM-dd HH:mm"));
System.out.println("输出到毫秒:" + dateTime.format("yyyy-MM-dd HH:mm:ss.SSS"));
System.out.println("某月天数:" + dateTime.getDayNumsInMonth());
System.out.println("星期:" + dateTime.getDayOfWeek());//1:星期日,7:星期六
System.out.println("是否周末:" + dateTime.isWeekend());
System.out.println("相距:" + dateTime.dayNumFrom(dateTime2) + "天");
dateTime.plusMonth(1);
System.out.println("增加一个月后的datetime: " + dateTime.toDateTimeString());
dateTime.plus(0, 0, 2, 4, 4, 5);
System.out.println("增加 XXX后的datetime: " + dateTime.toDateTimeString());
System.out.println("毫秒数:" + dateTime.getTimeInMilliSeconds());
//DateTime转换为Date
Date date = dateTime.getDate();
System.out.println( dateTime.getTimeInMilliSeconds() == date.getTime());
int d = dateTime.getNextMonday();
System.out.println(d);
cal.add(Calendar.DAY_OF_MONTH, +d);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(cal.getTime()));
cal.add(Calendar.DAY_OF_MONTH, +1);
System.out.println(cal.getTime());
System.out.println(sdf.format(cal.getTime()));
Date currentDate = new Date();
// 比如今天是2012-12-25 强调内容
List<Date> days = dateTime.dateToWeek(currentDate);
System.out.println("今天的日期: " + sdf.format(currentDate));
for (Date date1 : days) {
cal.setTime(date1);
cal.set(Calendar.HOUR_OF_DAY, 0);
//设置当前时刻的分钟为0
cal.set(Calendar.MINUTE, 0);
//设置当前时刻的秒钟为0
cal.set(Calendar.SECOND, 0);
//设置当前的毫秒钟为0
cal.set(Calendar.MILLISECOND, 0);
System.out.println((cal.getTime()));
}
System.out.println("===============================");
dateTime.dateTime(new Date());
}
}