dateutil 日期计算_时间工具类DateUtil

import java.sql.Timestamp;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.GregorianCalendar;

import java.util.HashMap;

import java.util.Map;

import org.apache.commons.lang.time.DateUtils;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import com.hurong.core.Constants;

public class DateUtil {

private static final Log logger = LogFactory.getLog(DateUtil.class);

/**

* 设置当前时间为当天的最初时间(即00时00分00秒)

*

* @param cal

* @return

*/

public static Calendar setStartDay(Calendar cal) {

cal.set(Calendar.HOUR_OF_DAY, 0);

cal.set(Calendar.MINUTE, 0);

cal.set(Calendar.SECOND, 0);

return cal;

}

public static Calendar setEndDay(Calendar cal) {

cal.set(Calendar.HOUR_OF_DAY, 23);

cal.set(Calendar.MINUTE, 59);

cal.set(Calendar.SECOND, 59);

return cal;

}

/**

* 把源日历的年月日设置到目标日历对象中

* @param destCal

* @param sourceCal

*/

public static void copyYearMonthDay(Calendar destCal,Calendar sourceCal){

destCal.set(Calendar.YEAR, sourceCal.get(Calendar.YEAR));

destCal.set(Calendar.MONTH, sourceCal.get(Calendar.MONTH));

destCal.set(Calendar.DAY_OF_MONTH, sourceCal.get(Calendar.DAY_OF_MONTH));

}

/**

* 格式化日期为

*

* @return

*/

public static String formatEnDate(Date date) {

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");

return sdf.format(date).replaceAll("上午", "AM").replaceAll("下午", "PM");

}

public static Date parseDate(String dateString) {

Date date = null;

try {

date = DateUtils.parseDate(dateString, new String[]{Constants.DATE_FORMAT_FULL,Constants.DATE_FORMAT_YMD});

} catch (Exception ex) {

logger.error("Pase the Date(" + dateString + ") occur errors:"

+ ex.getMessage());

}

return date;

}

public static String getDateAndTime() {

Calendar calendar = Calendar.getInstance();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

return sdf.format(calendar.getTime());

}

public static String getYearAndMonth(){

Calendar calendar=Calendar.getInstance();

SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMM");

return simpleDateFormat.format(calendar.getTime());

}

public final static Timestamp stringToTS(String time) {

SimpleDateFormat sf =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Timestamp ts = null;

try {

ts = new Timestamp(sf.parse(time).getTime());

} catch (ParseException e) {

e.printStackTrace();

}

return ts ;

}

public final static Timestamp stringToTsDate(String time){

SimpleDateFormat sf =  new SimpleDateFormat("yyyy-MM-dd");

Timestamp ts = null;

try {

ts = new Timestamp(sf.parse(time).getTime());

} catch (ParseException e) {

e.printStackTrace();

}

return ts ;

}

/**

* @function 得到现在的时间     yyyy-MM-dd HH:mm:ss

*

* @auther     jiangwanyu

*

* @return String

*/

public final static String getNowDateTime(){

Date nowDate = new Date();

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

return sf.format(nowDate);

}

/**

* @function 自定义 日期格式

* @param dateFormat

* @return

*/

public final static String getNowDateTime(String dateFormat){

Date nowDate = new Date();

SimpleDateFormat sf = null;

try {

sf = new SimpleDateFormat(dateFormat);

} catch (Exception e) {

e.printStackTrace();

return "";

}

return sf.format(nowDate);

}

/**

* @funciton 得到 Timestamp 类型的nowDateTime

*

* @author credit004

*

* @return      Timestamp

*/

public final static Timestamp getNowDateTimeTs(){

return stringToTS(getNowDateTime());

}

public final static Timestamp getNowDayTimeTs(){

return stringToTsDate(getNowDateTime());

}

/**

* @funciton 节点任务期限---XXXX年XX月XX日 星期X

* @param dayLimit

* @return

*/

public final static String getTaskTimeLimit(int dayLimit){

Date nowDate = new Date();

int mod = dayLimit % 5;

int other = dayLimit / 5 * 7;

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Calendar calendar = Calendar.getInstance();

calendar.setTime(nowDate);

/*

* 判断双休日  jiang

*/

for (int i = 0; i < mod;) {

calendar.add(Calendar.DATE, 1);

switch (calendar.get(Calendar.DAY_OF_WEEK)) {

case Calendar.SUNDAY:

case Calendar.SATURDAY:

break;

default:

i++;

break;

}

}

if (other > 0){

calendar.add(Calendar.DATE, other);

}

//          calendar.set(Calendar.DAY_OF_YEAR,calendar.get(Calendar.DAY_OF_YEAR) + dayLimit);

return sf.format(calendar.getTime());

}

/**

* @funciton 节点任务期限---XXXX年XX月XX日 星期X  ---放假天数【非双休人为放假   比如 春节 比如 十一】

* @param dayLimit

* @return

*/

public final static String getTaskTimeLimit(int dayLimit, int holidays){

Date nowDate = new Date();

dayLimit = dayLimit+holidays;

SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日 E");

Calendar calendar = Calendar.getInstance();

calendar.setTime(nowDate);

calendar.set(Calendar.DAY_OF_YEAR,calendar.get(Calendar.DAY_OF_YEAR) + dayLimit);

return sf.format(calendar.getTime());

}

/**

* @funciton 得到 (time)时间 后的第(months)个月

*/

public final static Timestamp getNextTerm(Timestamp time, int months){

Calendar calendar = Calendar.getInstance();

calendar.setTime(time);

calendar.add(Calendar.MONTH, months);

Timestamp timestamp = new Timestamp(calendar.getTime().getTime());

return timestamp;

}

/**两个日期的 日期差  参数s1:被减数  参数s2 :减数*/

public final static int getSurplusDays(Timestamp s1, Timestamp s2){

Calendar c1 = Calendar.getInstance();

c1.setTime(s1);

Calendar c2 = Calendar.getInstance();

c2.setTime(s2);

long diff = (c1.getTimeInMillis()-c2.getTimeInMillis())/(1000*60*60*24);

return ((Long)diff).intValue();

}

//      DateFormat   format=new   SimpleDateFormat("yyyy-MM-dd");

//      Calendar   calendar=Calendar.getInstance();

//      calendar.setTime(mdefSetting.getDate());

//      calendar.add(Calendar.DAY_OF_MONTH,1);

//      mdefs.setName(format.format(calendar.getTime())+" 至 "+mdefSetting2.getDate());

/**

* 在日期上加days天,得到新的日期

* @return

*/

public final static Date addDaysToDate(Date date,int days){

Calendar c = Calendar.getInstance();

c.setTime(date);

c.add(Calendar.DATE,days);

return c.getTime();

}

/**

* @function 得到自定义 日期格式

* @param dateFormat

* @return

*/

public final static String getFormatDateTime(Date date,String dateFormat){

SimpleDateFormat sf = null;

try {

sf = new SimpleDateFormat(dateFormat);

} catch (Exception e) {

e.printStackTrace();

return "";

}

return sf.format(date);

}

/**

* 在日期上加months月,得到新的日期

* @return

*/

public final static Date addMonthsToDate(Date date,int months){

Calendar c = Calendar.getInstance();

c.setTime(date);

c.add(Calendar.MONTH,months);

return c.getTime();

}

/**

* 在日期上加months月和日,得到新的日期

* @return

*/

public final static Date addMonthsToDate(Date date,int months,int days){

Calendar c = Calendar.getInstance();

c.setTime(date);

c.add(Calendar.MONTH,months);

c.add(Calendar.DATE,days);

//      c.roll(Calendar.DATE, days);

return c.getTime();

}

/**

* 计算两日期之间相隔月份和天数

* @return

*/

public static Map getMonthAndDaysBetweenDate(String date1,String date2){

Map  map=new HashMap();

SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");

Date d1 = null;

try {

d1 = sd.parse(date1);

} catch (ParseException e) {

e.printStackTrace();

}

Date d2=null;

try {

d2 = sd.parse(date2);

} catch (ParseException e) {

e.printStackTrace();

}

int months=0;//相差月份

int days=0;

int y1=d1.getYear();

int y2=d2.getYear();

int dm1=d2.getMonth();//起始日期月份

int dm2=d2.getMonth();//结束日期月份

int dd1=d1.getDate(); //起始日期天

int dd2=d2.getDate(); //结束日期天

if(d1.getTime()

months=d2.getMonth()-d1.getMonth()+(y2-y1)*12;

if(dd2

months=months-1;

}

System.out.println(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"));

days=getDaysBetweenDate(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"),date2);

map.put(1, months);

map.put(2, days);

}

return map;

}

/**

* 计算两日期之间相隔月份和天数,目前只有按月计算用到 2012.03.09

* @return

*/

public static Map getMonthAndDaysBetweenDate2(String date1,String date2){

Map  map=new HashMap();

SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");

Date d1 = null;

try {

d1 = sd.parse(date1);

} catch (ParseException e) {

e.printStackTrace();

}

Date d2=null;

try {

d2 = sd.parse(date2);

} catch (ParseException e) {

e.printStackTrace();

}

int months=0;//相差月份

int days=0;

int y1=d1.getYear();

int y2=d2.getYear();

int dm1=d2.getMonth();//起始日期月份

int dm2=d2.getMonth();//结束日期月份

int dd1=d1.getDate(); //起始日期天

int dd2=d2.getDate(); //结束日期天

if(d1.getTime()

months=d2.getMonth()-d1.getMonth()+(y2-y1)*12;

if(dd2

months=months-1;

}

if(dd2==dd1-1){

months = months +1;

}

System.out.println(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"));

days=getDaysBetweenDate2(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"),date2);

map.put(1, months);

map.put(2, days);

}

return map;

}

/**

* 计算两日期之间相隔月份和天数,目前只有按月计算用到 2012.03.09

* @return

*/

public static Map getMonthAndDaysBetweenDate3(String date1,String date2){

Map  map=new HashMap();

SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");

Date d1 = null;

try {

d1 = sd.parse(date1);

} catch (ParseException e) {

e.printStackTrace();

}

Date d2=null;

try {

d2 = sd.parse(date2);

} catch (ParseException e) {

e.printStackTrace();

}

int months=0;//相差月份

int days=0;

int y1=d1.getYear();

int y2=d2.getYear();

int dm1=d2.getMonth();//起始日期月份

int dm2=d2.getMonth();//结束日期月份

int dd1=d1.getDate(); //起始日期天

int dd2=d2.getDate(); //结束日期天

if(d1.getTime()

months=d2.getMonth()-d1.getMonth()+(y2-y1)*12;

if(dd2

months=months-1;

}

System.out.println(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"));

days=getDaysBetweenDate2(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"),date2);

if(dd2 == dd1){

days = 0;

}

map.put(1, months);

map.put(2, days);

}

return map;

}

/**

* 计算两日期之间的天数

* @return

*/

public final static int getDaysBetweenDate(String date1,String date2){

SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");

Date d1 = null;

try {

d1 = sd.parse(date1);

} catch (ParseException e) {

e.printStackTrace();

}

Date d2=null;

try {

d2 = sd.parse(date2);

} catch (ParseException e) {

e.printStackTrace();

}

Calendar c1 = Calendar.getInstance();

c1.setTime(d1);

Calendar c2 = Calendar.getInstance();

c2.setTime(d2);

long diff = (c2.getTimeInMillis()-c1.getTimeInMillis())/(1000*60*60*24);

return ((Long)diff).intValue();

}

/**

* 计算两日期之间的天数,目前只有按月计算用到2012.03.09

* @return

*/

public final static int getDaysBetweenDate2(String date1,String date2){

SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");

Date d1 = null;

try {

d1 = sd.parse(date1);

} catch (ParseException e) {

e.printStackTrace();

}

Date d2=null;

try {

d2 = sd.parse(date2);

} catch (ParseException e) {

e.printStackTrace();

}

int rdays =0;

if(d2.getDate()>= d1.getDate()){

rdays = d2.getDate()-d1.getDate()+1;

}else{

rdays = d2.getDate()+30-d1.getDate()+1;

}

return rdays;

}

/**

*

* @param dateString 日期字符串 如2011-01-03

* @param dateFormate  日期格式 如yyyy-MM-dd

* @return 根据传入的日期字符串和日期格式返回指定格式的日期

*/

public final static Date parseDate(String dateString,String dateFormate) {

SimpleDateFormat sd=new SimpleDateFormat(dateFormate);

Date date=null;

try {

date=sd.parse(dateString);

} catch (Exception ex) {

logger.error("Pase the Date(" + dateString + ") occur errors:"

+ ex.getMessage());

}

return date;

}

public static String getNowDate(String formart){

String temp_str="";

Date dt = new Date();

SimpleDateFormat sdf = new SimpleDateFormat(formart);

temp_str=sdf.format(dt);

return temp_str;

}

/**

* 计算两日期之间的相差月份和天数

* @return

*/

public final static int getMonthDaysBetweenDate(String date1,String date2){

Date d1=new Date(date1);

return 0;

}

public static String dateToStr(Date date, String format){

SimpleDateFormat dateFormat = new SimpleDateFormat(format);

return dateFormat.format(date);

}

/**得到今天中小时(24H)*/

public final static int getHourOfDay(){

Calendar calendar=Calendar.getInstance();

return calendar.get(calendar.HOUR_OF_DAY);

}

/**得到今天中分钟*/

public final static int getMinOfDay(){

Calendar calendar=Calendar.getInstance();

return calendar.get(calendar.MINUTE);

}

public final static long getDateTimeNow(){

Date date=new Date();

return date.getTime();

}

// 返回第几个月份,不是几月

// 季度一年四季, 第一季度:2月-4月, 第二季度:5月-7月, 第三季度:8月-10月, 第四季度:11月-1月

public static int getQuarterInMonth(int month, boolean isQuarterStart) {

int months[] = { 1, 4, 7, 10 };

if (!isQuarterStart) {

months = new int[] { 3, 6, 9, 12 };

}

if (month >= 2 && month <= 4)

return months[0];

else if (month >= 5 && month <= 7)

return months[1];

else if (month >= 8 && month <= 10)

return months[2];

else

return months[3];

}

// 返回第几季度

public static int getQuarterInMonth(int month) {

int months[] = { 1, 2, 3, 4 };  //4个季度

if (month >= 1 && month <= 3)

return months[0];

else if (month >= 4 && month <= 6)

return months[1];

else if (month >= 7 && month <= 9)

return months[2];

else

return months[3];

}

public static String getBetweenDate(String date1,String date2){

return null;

}

public static String dateDiff(String startTime, String endTime,

String format, String str) {

String ret="";

// 按照传入的格式生成一个simpledateformate对象

SimpleDateFormat sd = new SimpleDateFormat(format);

long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数

long nh = 1000 * 60 * 60;// 一小时的毫秒数

long nm = 1000 * 60;// 一分钟的毫秒数

long ns = 1000;// 一秒钟的毫秒数

long diff;

long day = 0;

long hour = 0;

long min = 0;

long sec = 0;

// 获得两个时间的毫秒时间差异

try {

diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();

day = diff / nd;// 计算差多少天

hour = diff % nd / nh + day * 24;// 计算差多少小时

min = diff % nd % nh / nm + day * 24 * 60;// 计算差多少分钟

sec = diff % nd % nh % nm / ns;// 计算差多少秒

// 输出结果

System.out.println("" + day + "天" + (hour - day * 24) + "小时"

+ (min - day * 24 * 60) + "分钟" + sec + "秒。");

System.out.println("hour=" + hour + ",min=" + min);

ret="" + day + "天" + (hour - day * 24) + "小时"

+ (min - day * 24 * 60) + "分钟" + sec + "秒。";

if (str.equalsIgnoreCase("h")) {

// return hour;

} else {

//return min;

}

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if (str.equalsIgnoreCase("h")) {

//return hour;

} else {

//return min;

}

return ret;

}

public static String getCurrentMonthFistDay() {

Calendar cal = Calendar.getInstance();

SimpleDateFormat datef=new SimpleDateFormat("yyyy-MM-dd");

//当前月的最后一天

cal.set( Calendar.DATE, 1 );

cal.roll(Calendar.DATE, - 1 );

//当前月的第一天

cal.set(GregorianCalendar.DAY_OF_MONTH, 1);

Date beginTime=cal.getTime();

String beginTime1=datef.format(beginTime)+" 00:00:00";

return beginTime1;

}

public static String getCurrentMonthLastDay() {

Calendar cal = Calendar.getInstance();

SimpleDateFormat datef=new SimpleDateFormat("yyyy-MM-dd");

//当前月的最后一天

cal.set( Calendar.DATE, 1 );

cal.roll(Calendar.DATE, - 1 );

Date endTime=cal.getTime();

String endTime1=datef.format(endTime)+" 23:59:59";

return endTime1;

}

/**

* @param date1  起始日期

* @param date2 截止日期

* @return  两日期之间的天数

*/

public final static int getDaysBetweenDate(Date date1,Date date2){

Calendar c1 = Calendar.getInstance();

c1.setTime(date1);

c1.set(Calendar.HOUR_OF_DAY, 0);

c1.set(Calendar.MINUTE, 0);

c1.set(Calendar.SECOND, 0);

c1.set(Calendar.MILLISECOND, 0);

Calendar c2 = Calendar.getInstance();

c2.setTime(date2);

c2.set(Calendar.HOUR_OF_DAY, 0);

c2.set(Calendar.MINUTE, 0);

c2.set(Calendar.SECOND, 0);

c2.set(Calendar.MILLISECOND, 0);

long diff = (c2.getTimeInMillis()-c1.getTimeInMillis())/(1000*60*60*24);

return ((Long)diff).intValue();

}

/**

* 获取一个日期的一天第一个时间和最后一个时间

* strDate 传入日期

* strKey用来判断是获取最开始日期还是最后日期 first  开始 end最后

* 返回的日期格式为 String类型

*/

public static String getFirstDate(Date strDate,String strKey){

SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd 00:00:00");

SimpleDateFormat formatEndDate = new SimpleDateFormat("yyyy-MM-dd 23:59:59");

if(strDate!=null&&!"".equals(strDate)){

if(strKey!=null&&"first".equals(strKey)){

return formatDate.format(strDate);

}if(strKey!=null&&"end".equals(strKey)){

return formatEndDate.format(strDate);

}else{

return formatDate.format(strDate);

}

}else{

return null;

}

}

/**

* 获取一个日期的一天第一个时间和最后一个时间

* strDate 传入日期

* strKey用来判断是获取最开始日期还是最后日期 first  开始 end最后

* 返回的日期格式为Date  类型

*/

public static Date getDateFirstDate(Date strDate,String strKey){

try {

SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");

String date=getFirstDate(strDate,strKey);

if(date!=null){

return formatDate.parse(date);

}else{

return null;

}

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

public static String getMaxMonthDate(String date) throws ParseException{

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

Calendar calendar = Calendar.getInstance();

calendar.setTime(dateFormat.parse(date));

calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));

return dateFormat.format(calendar.getTime());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值