package com.accp.office.util;
import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TimeUtil {
//用来全局控制 上一周,本周,下一周的周数变化
private static int weeks = 0;
private static int MaxDate;//一月最大天数
private static int MaxYear;//一年最大天数
static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
/**
* 获取每个月的最后一天不带时分秒
* @author 吕兵阳
* @return
*/
public static Date getLastDayOfMonth(Calendar cal){
String lastDay = cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.getActualMaximum(Calendar.DAY_OF_MONTH);
try {
return sdf.parse(lastDay);
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取当前时间失败!");
return null;
}
}
/**
* 获取一个月的第一天不带时分秒
* @author 吕兵阳
* @param cal
* @return
*/
public static Date getFirstDayOfMonth(Calendar cal) {
String firstDay = cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+01;
try {
return sdf.parse(firstDay);
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取当前时间失败!");
return null;
}
}
/**
* 获取今天不带时分秒
* @author 吕兵阳
* @param cal
* @return
*/
public static Date getTime(Calendar cal){
String now = cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.DAY_OF_MONTH);
try {
return sdf.parse(now);
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取时间失败!");
return null;
}
}
/**
* 获取明天不带时分秒
* @author 吕兵阳
* @param cal
* @return
*/
public static Date getTomorrow(Calendar cal){
String tomorrow = cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+(cal.get(Calendar.DAY_OF_MONTH)+2);
try {
return sdf.parse(tomorrow);
} catch (Exception e) {
e.printStackTrace();
System.out.println("获取时间出错!");
return null;
}
}
/**
* 将一个字符串转换为一个日期对象
* @description
* @author 吕兵阳
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 获取两个时间相差的天数
* @description
* @author 吕兵阳
* @param sj1 时间1
* @param sj2 时间2
* @return
*/
public static long getDays(String date1, String date2) {
if (date1 == null || date1.equals(""))
return 0;
if (date2 == null || date2.equals(""))
return 0;
// 转换为标准时间
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
java.util.Date mydate = null;
try {
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
} catch (Exception e) {
}
long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
return day;
}
/**
* 获取当月最后一天,返回日期的字符串
* @description
* @author 吕兵阳
* @return
*/
public static String getLastDayofMonth(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE,1);//设为当前月的1号
lastDate.add(Calendar.MONTH,1);//加一个月,变为下月的1号
lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天
str=sdf.format(lastDate.getTime());
return str;
}
/**
* 获取上个月第一天,返回标准的日期字符串
* @description
* @author 吕兵阳
* @return
*/
public static String getPreviousMonthFirst(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.set(Calendar.DATE,1);//设为当前月的1号
lastDate.add(Calendar.MONTH,-1);//减一个月,变为下月的1号
//lastDate.add(Calendar.DATE,-1);//减去一天,变为当月最后一天
str=sdf.format(lastDate.getTime());
return str;
}
/**
* 获取本周周日的日期,返回标准的日期字符串
* @description
* @author 吕兵阳
* @return
*/
public static String getCurrentWeekday() {
weeks = 0;
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus+6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得当前日期与本周日相差的天数
* @description
* @author 吕兵阳
* @return
*/
private static int getMondayPlus() {
Calendar cd = Calendar.getInstance();
// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK)-1; //因为按中国礼拜一作为第一天所以这里减1
if (dayOfWeek == 1) {
return 0;
} else {
return 1 - dayOfWeek;
}
}
/**
* 获得本周一的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getMondayOFWeek(){
weeks = 0;
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得相应周的周六的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getSaturday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks + 5);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得上周星期日的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getPreviousWeekSunday() {
weeks=0;
weeks--;
int mondayPlus =getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus+weeks);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得上周星期一的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getPreviousWeekday() {
weeks--;
int mondayPlus =getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7 * weeks);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得下周星期一的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getNextMonday() {
weeks++;
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 获得下周星期日的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getNextSunday() {
int mondayPlus =getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus + 7+6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/**
* 月份的计算
* @description
* @author 吕兵阳
* @return
*/
private static int getMonthPlus(){
Calendar cd = Calendar.getInstance();
int monthOfNumber = cd.get(Calendar.DAY_OF_MONTH);
cd.set(Calendar.DATE, 1);//把日期设置为当月第一天
cd.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
MaxDate=cd.get(Calendar.DATE);
if(monthOfNumber == 1){
return -MaxDate;
}else{
return 1-monthOfNumber;
}
}
/**
* 获得上月最后一天的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getPreviousMonthEnd(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH,-1);//减一个月
lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天
lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天
str=sdf.format(lastDate.getTime());
return str;
}
/**
* 获得下个月第一天的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getNextMonthFirst(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH,1);//减一个月
lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天
str=sdf.format(lastDate.getTime());
return str;
}
/**
* 获得下个月最后一天的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getNextMonthEnd(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.MONTH,1);//加一个月
lastDate.set(Calendar.DATE, 1);//把日期设置为当月第一天
lastDate.roll(Calendar.DATE, -1);//日期回滚一天,也就是本月最后一天
str=sdf.format(lastDate.getTime());
return str;
}
/**
* 获得明年最后一天的日期
* @description
* @author 吕兵阳
* @return
*/
public String getNextYearEnd(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.YEAR,1);//加一个年
lastDate.set(Calendar.DAY_OF_YEAR, 1);
lastDate.roll(Calendar.DAY_OF_YEAR, -1);
str=sdf.format(lastDate.getTime());
return str;
}
/**
* 获得明年第一天的日期
* @description
* @author 吕兵阳
* @return
*/
public String getNextYearFirst(){
String str = "";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar lastDate = Calendar.getInstance();
lastDate.add(Calendar.YEAR,1);//加一个年
lastDate.set(Calendar.DAY_OF_YEAR, 1);
str=sdf.format(lastDate.getTime());
return str;
}
/**
* 获得本年有多少天
* @description
* @author 吕兵阳
* @return
*/
public static int getMaxYear(){
Calendar cd = Calendar.getInstance();
cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天
cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。
int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
return MaxYear;
}
public static int getYearPlus(){
Calendar cd = Calendar.getInstance();
int yearOfNumber = cd.get(Calendar.DAY_OF_YEAR);//获得当天是一年中的第几天
cd.set(Calendar.DAY_OF_YEAR,1);//把日期设为当年第一天
cd.roll(Calendar.DAY_OF_YEAR,-1);//把日期回滚一天。
int MaxYear = cd.get(Calendar.DAY_OF_YEAR);
if(yearOfNumber == 1){
return -MaxYear;
}else{
return 1-yearOfNumber;
}
}
/**
* 获得本年第一天的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getCurrentYearFirst(){
int yearPlus = getYearPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE,yearPlus);
Date yearDay = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preYearDay = df.format(yearDay);
return preYearDay;
}
/**
* 获得本年最后一天的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getCurrentYearEnd(){
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");//可以方便地修改日期格式
String years = dateFormat.format(date);
return years+"-12-31";
}
/**
* 获得上年第一天的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getPreviousYearFirst(){
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");//可以方便地修改日期格式
String years = dateFormat.format(date); int years_value = Integer.parseInt(years);
years_value--;
return years_value+"-1-1";
}
/**
* 获得上年最后一天的日期
* @description
* @author 吕兵阳
* @return
*/
public static String getPreviousYearEnd(){
weeks--;
int yearPlus =getYearPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE,yearPlus+MaxYear*weeks+(MaxYear-1));
Date yearDay = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preYearDay = df.format(yearDay);
getThisSeasonTime(11);
return preYearDay;
}
/**
* 获得季度的开始日期和结束日期
* @description
* @author 吕兵阳
* @param month
* @return
*/
public static String getThisSeasonTime(int month){
int array[][] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int season = 1;
if(month>=1&&month<=3){
season = 1;
}
if(month>=4&&month<=6){
season = 2;
}
if(month>=7&&month<=9){
season = 3;
}
if(month>=10&&month<=12){
season = 4;
}
int start_month = array[season-1][0];
int end_month = array[season-1][2];
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");//可以方便地修改日期格式
String years = dateFormat.format(date);
int years_value = Integer.parseInt(years);
int start_days =1;//years+"-"+String.valueOf(start_month)+"-1";//getLastDayOfMonth(years_value,start_month);
int end_days = getLastDayOfMonth(years_value,end_month);
String seasonDate = years_value+"-"+start_month+"-"+start_days+";"+years_value+"-"+end_month+"-"+end_days;
return seasonDate;
}
private static int getLastDayOfMonth(int year, int month) {
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8
|| month == 10 || month == 12) {
return 31;
}
if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
}
if (month == 2) {
if (isLeapYear(year)) {
return 29;
} else {
return 28;
}
}
return 0;
}
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
下面是junit测试:
@Test
public void test4(){
logger.info("两个时间相差几天:"+TimeUtil.getDays("2013-10-10", "2013-10-09"));
logger.info("你输入的字符串转换为日期后是:"+TimeUtil.strToDate("2013-12-6"));
logger.info("当月最后一天:"+TimeUtil.getLastDayofMonth());
logger.info("上个月第一天:"+TimeUtil.getPreviousMonthFirst());
logger.info("本周周日的日期是:"+TimeUtil.getCurrentWeekday());
logger.info("本周一的日期:"+TimeUtil.getMondayOFWeek());
logger.info("获得相应周的周六的日期:"+TimeUtil.getSaturday());
logger.info("获得上周星期日的日期:"+TimeUtil.getPreviousWeekSunday());
logger.info("获得上周星期一的日期:"+TimeUtil.getPreviousWeekday());
logger.info("获得下周星期一的日期:"+TimeUtil.getNextMonday());
logger.info("获得下周星期日的日期:"+TimeUtil.getNextSunday());
logger.info("本年有:"+TimeUtil.getMaxYear()+"天!");
logger.info("季度的开始和结束:"+TimeUtil.getThisSeasonTime(1));
}