`
he_wen
  • 浏览: 239497 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java对日期操作处理类

    博客分类:
  • Java
阅读更多

项目中经常用到对日期相关操作

package com.seg.common.util;



import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * 日期处理工具类
 * @author Lee
 */

public class DateUtil {
    //~ Static fields/initializers =============================================
	
	
    private static Log log = LogFactory.getLog(DateUtil.class);
    private static String defaultDatePattern = null;
    private static String timePattern = "HH:mm";
    public static final String TS_FORMAT = DateUtil.getDatePattern() + " HH:mm:ss.S";
	private static Calendar cale = Calendar.getInstance();
	private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	private static SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm:ss");
	private static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    //~ Methods ================================================================

	public DateUtil(){
	}
	
	/**
	 * 获得服务器当前日期及时间,以格式为:yyyy-MM-dd HH:mm:ss的日期字符串形式返回
	 */
	public static String getDateTime(){
		try{
			return sdf2.format(cale.getTime());
		} catch(Exception e){
			log.debug("DateUtil.getDateTime():" + e.getMessage());
			return "";
		}
	}
	/**
	 * 获得服务器当前日期,以格式为:yyyy-MM-dd的日期字符串形式返回
	 */
	public static String getDate(){
		try{
			return sdf.format(cale.getTime());
		} catch(Exception e){
			log.debug("DateUtil.getDate():" + e.getMessage());
			return "";
		}
	}

	/**
	 * 获得服务器当前时间,以格式为:HH:mm:ss的日期字符串形式返回
	 */
	public static String getTime(){
		String temp = "";
		try{
			temp += sdf1.format(cale.getTime());
			return temp;
		} catch(Exception e){
			log.debug("DateUtil.getTime():" + e.getMessage());
			return "";
		}
	}


	/**
	 * 统计时开始日期的默认值,
	 * 今年的开始时间
	 */
	public static String getStartDate(){
		try{
			return getYear() + "-01-01";
		} catch(Exception e){
			log.debug("DateUtil.getStartDate():" + e.getMessage());
			return "";
		}
	}

	/**
	 * 统计时结束日期的默认值
	 */
	public static String getEndDate(){
		try{
			return getDate();
		} catch(Exception e){
			log.debug("DateUtil.getEndDate():" + e.getMessage());
			return "";
		}
	}


	/**
	 * 获得服务器当前日期的年份
	 */
	public static String getYear(){
		try{
			//返回的int型,需要字符串转换
			return String.valueOf(cale.get(Calendar.YEAR));
		} catch(Exception e){
			log.debug("DateUtil.getYear():" + e.getMessage());
			return "";
		}
	}

	/**
	 * 获得服务器当前日期的月份
	 */
	public static String getMonth(){
		try{
			//一个数字格式,非常好
			java.text.DecimalFormat df = new java.text.DecimalFormat();
			df.applyPattern("00");
			return df.format((cale.get(Calendar.MONTH) + 1));
			//return String.valueOf(cale.get(Calendar.MONTH) + 1);
		} catch(Exception e){
			log.debug("DateUtil.getMonth():" + e.getMessage());
			return "";
		}
	}

	/**
	 * 获得服务器在当前月中天数
	 */
	public static String getDay(){
		try{
			return String.valueOf(cale.get(Calendar.DAY_OF_MONTH));
		} catch(Exception e){
			log.debug("DateUtil.getDay():" + e.getMessage());
			return "";
		}
	}

	/**
	 * 比较两个日期相差的天数,
	 * 第一个日期要比第二个日期要晚
	 */
	public static int getMargin(String date1,String date2){
		int margin;
		try{
			ParsePosition pos = new ParsePosition(0);
			ParsePosition pos1 = new ParsePosition(0);
			Date dt1 = sdf.parse(date1,pos);
			Date dt2 = sdf.parse(date2,pos1);
			long l = dt1.getTime() - dt2.getTime();
			margin = (int)(l / (24 * 60 * 60 * 1000));
			return margin;
		} catch(Exception e){
			log.debug("DateUtil.getMargin():" + e.toString());
			return 0;
		}
	}


	/**
	 * 比较两个日期相差的天数,格式不一样
	 * 第一个日期要比第二个日期要晚
	 */
	public static double getDoubleMargin(String date1,String date2){
		double margin;
		try{
			ParsePosition pos = new ParsePosition(0);
			ParsePosition pos1 = new ParsePosition(0);
			Date dt1 = sdf2.parse(date1,pos);
			Date dt2 = sdf2.parse(date2,pos1);
			long l = dt1.getTime() - dt2.getTime();
			margin = (l / (24 * 60 * 60 * 1000.00));
			return margin;
		} catch(Exception e){
			log.debug("DateUtil.getMargin():" + e.toString());
			return 0;
		}
	}


	/**
	 * 比较两个日期相差的月数
	 */
	public static int getMonthMargin(String date1,String date2){
		int margin;
		try{
			margin  = (Integer.parseInt(date2.substring(0,4)) - Integer.parseInt(date1.substring(0,4)))* 12;
			margin += (Integer.parseInt(date2.substring(4,7).replaceAll("-0","-")) - Integer.parseInt(date1.substring(4,7).replaceAll("-0","-")));
			return margin;
		} catch(Exception e){
			log.debug("DateUtil.getMargin():" + e.toString());
			return 0;
		}
	}

	/**
	 * 返回日期加X天后的日期
	 */
	public static String addDay(String date,int i){
		try{
			GregorianCalendar gCal = new GregorianCalendar(Integer.parseInt(date.substring(0,4)),Integer.parseInt(date.substring(5,7))-1,Integer.parseInt(date.substring(8,10)));
			gCal.add(GregorianCalendar.DATE,i);
			return sdf.format(gCal.getTime());
		} catch(Exception e){
			log.debug("DateUtil.addDay():" + e.toString());
			return getDate();
		}
	}

	/**
	 * 返回日期加X月后的日期
	 */
	public static String addMonth(String date,int i){
		try{
			GregorianCalendar gCal = new GregorianCalendar(Integer.parseInt(date.substring(0,4)),Integer.parseInt(date.substring(5,7))-1,Integer.parseInt(date.substring(8,10)));
			gCal.add(GregorianCalendar.MONTH,i);
			return sdf.format(gCal.getTime());
		} catch(Exception e){
			log.debug("DateUtil.addMonth():" + e.toString());
			return getDate();
		}
	}

	/**
	 * 返回日期加X年后的日期
	 */
	public static String addYear(String date,int i){
		try{
			GregorianCalendar gCal = new GregorianCalendar(Integer.parseInt(date.substring(0,4)),Integer.parseInt(date.substring(5,7))-1,Integer.parseInt(date.substring(8,10)));
			gCal.add(GregorianCalendar.YEAR,i);
			return sdf.format(gCal.getTime());
		} catch(Exception e){
			log.debug("DateUtil.addYear():" + e.toString());
			return "";
		}
	}


	/**
	 * 返回某年某月中的最大天
	 */
	public static int getMaxDay(String year,String month){
		int day = 0;
		try{
			int iyear = Integer.parseInt(year);
			int imonth = Integer.parseInt(month);
			if(imonth == 1 || imonth == 3 || imonth == 5 || imonth == 7 || imonth == 8 || imonth == 10 || imonth == 12){
				day = 31;
			} else if(imonth == 4 || imonth == 6 || imonth == 9 || imonth == 11){
				day = 30;
			} else if((0 == (iyear % 4)) && (0 != (iyear % 100)) || (0 == (iyear % 400))){
				day = 29;
			} else{
				day = 28;
			}
			return day;
		} catch(Exception e){
			log.debug("DateUtil.getMonthDay():" + e.toString());
			return 1;
		}
	}
	


	/**
	 * 格式化日期
	 */
	@SuppressWarnings("static-access")
	public String rollDate(String orgDate,int Type,int Span){
		try{
			String temp = "";
			int iyear,imonth,iday;
			int iPos = 0;
			char seperater = '-';
			if(orgDate == null || orgDate.length() < 6){
				return "";
			}

			iPos = orgDate.indexOf(seperater);
			if(iPos > 0){
				iyear = Integer.parseInt(orgDate.substring(0,iPos));
				temp = orgDate.substring(iPos + 1);
			} else{
				iyear = Integer.parseInt(orgDate.substring(0,4));
				temp = orgDate.substring(4);
			}

			iPos = temp.indexOf(seperater);
			if(iPos > 0){
				imonth = Integer.parseInt(temp.substring(0,iPos));
				temp = temp.substring(iPos + 1);
			} else{
				imonth = Integer.parseInt(temp.substring(0,2));
				temp = temp.substring(2);
			}

			imonth--;
			if(imonth < 0 || imonth > 11){
				imonth = 0;
			}

			iday = Integer.parseInt(temp);
			if(iday < 1 || iday > 31)
				iday = 1;

			Calendar orgcale = Calendar.getInstance();
			orgcale.set(iyear,imonth,iday);
			temp = this.rollDate(orgcale,Type,Span);
			return temp;
		}catch(Exception e){
			return "";
		}
	}

	public static String rollDate(Calendar cal,int Type,int Span){
		try{
			String temp = "";
			Calendar rolcale;
			rolcale = cal;
			rolcale.add(Type,Span);
			temp = sdf.format(rolcale.getTime());
			return temp;
		}catch(Exception e){
			return "";
		}
	}

    /**
     * 
     * 返回默认的日期格式
     * 
     */
    public static synchronized String getDatePattern() {
        defaultDatePattern = "yyyy-MM-dd";
        return defaultDatePattern;
    }

    /**
     * 将指定日期按默认格式进行格式代化成字符串后输出如:yyyy-MM-dd
     */
    public static final String getDate(Date aDate) {
        SimpleDateFormat df = null;
        String returnValue = "";

        if (aDate != null) {
            df = new SimpleDateFormat(getDatePattern());
            returnValue = df.format(aDate);
        }

        return (returnValue);
    }



    /**
     * 取得给定日期的时间字符串,格式为当前默认时间格式
     */
    public static String getTimeNow(Date theTime) {
        return getDateTime(timePattern, theTime);
    }

    /**
     * 取得当前时间的Calendar日历对象
     */
    public Calendar getToday() throws ParseException {
        Date today = new Date();
        SimpleDateFormat df = new SimpleDateFormat(getDatePattern());
        String todayAsString = df.format(today);
        Calendar cal = new GregorianCalendar();
        cal.setTime(convertStringToDate(todayAsString));
        return cal;
    }

    /**
     * 将日期类转换成指定格式的字符串形式
     */
    public static final String getDateTime(String aMask, Date aDate) {
        SimpleDateFormat df = null;
        String returnValue = "";

        if (aDate == null) {
            log.error("aDate is null!");
        } else {
            df = new SimpleDateFormat(aMask);
            returnValue = df.format(aDate);
        }
        return (returnValue);
    }
    
    /**
     * 将指定的日期转换成默认格式的字符串形式
     */
    public static final String convertDateToString(Date aDate) {
        return getDateTime(getDatePattern(), aDate);
    }

    
    /**
     * 将日期字符串按指定格式转换成日期类型
     * @param aMask 指定的日期格式,如:yyyy-MM-dd 
     * @param strDate 待转换的日期字符串
     */
    
    public static final Date convertStringToDate(String aMask, String strDate)
      throws ParseException {
        SimpleDateFormat df = null;
        Date date = null;
        df = new SimpleDateFormat(aMask);

        if (log.isDebugEnabled()) {
            log.debug("converting '" + strDate + "' to date with mask '"
                      + aMask + "'");
        }
        try {
            date = df.parse(strDate);
        } catch (ParseException pe) {
            log.error("ParseException: " + pe);
            throw pe;
        }
        return (date);
    }
    
    /**
     * 将日期字符串按默认格式转换成日期类型
     */
    public static Date convertStringToDate(String strDate)
      throws ParseException {
        Date aDate = null;

        try {
            if (log.isDebugEnabled()) {
                log.debug("converting date with pattern: " + getDatePattern());
            }
            aDate = convertStringToDate(getDatePattern(), strDate);
        } catch (ParseException pe) {
            log.error("Could not convert '" + strDate
                      + "' to a date, throwing exception");
            throw new ParseException(pe.getMessage(),
                                     pe.getErrorOffset());
                    
        }

        return aDate;
    }
    
    /**
     * 返回一个JAVA简单类型的日期字符串
     */
    public static String getSimpleDateFormat(){
    	SimpleDateFormat formatter=new SimpleDateFormat();
		String NDateTime=formatter.format(new Date());
		return NDateTime;
    }
    
    /**
     * 将两个字符串格式的日期进行比较
     * @param last 要比较的第一个日期字符串
     * @param now	要比较的第二个日期格式字符串
     * @return true(last 在now 日期之前),false(last 在now 日期之后)
     */
    public static boolean compareTo(String last, String now) {
		try {
			SimpleDateFormat formatter = new SimpleDateFormat(
					"yyyy-MM-dd HH:mm:ss");
			Date temp1 = formatter.parse(last);
			Date temp2 = formatter.parse(now);
			if (temp1.after(temp2))
				return false;
			else if (temp1.before(temp2))
				return true;
		} catch (ParseException e) {
			log.debug(e.getMessage());
		}
		return false;
	}    
    
    protected Object convertToDate(Class type, Object value) {
        DateFormat df = new SimpleDateFormat(TS_FORMAT);
        if (value instanceof String) {
            try {
                if (StringUtils.isEmpty(value.toString())) {
                    return null;
                }
                return df.parse((String) value);
            } catch (Exception pe) {
                throw new ConversionException("Error converting String to Timestamp");
            }
        }

        throw new ConversionException("Could not convert "
                + value.getClass().getName() + " to " + type.getName());
    }




    
    /**
     *  为查询日期添加最小时间
     *  @param 目标类型Date
     *  @param 转换参数Date
     *  @return 
     */   
    @SuppressWarnings("deprecation")
	public static Date addStartTime(Date param) {
    	Date date = param;
        try{
        	date.setHours(0);
        	date.setMinutes(0);
        	date.setSeconds(0);
            return date;
        }catch(Exception ex){
        	return date;
        }
    }


    
    /**
     * 为查询日期添加最大时间
     *  @param 目标类型Date
     *  @param 转换参数Date
     *  @return 
     */   
    @SuppressWarnings("deprecation")
	public static Date addEndTime(Date param) {
    	Date date = param;
        try{
        	date.setHours(23);
        	date.setMinutes(59);
        	date.setSeconds(0);
            return date;
        }catch(Exception ex){
            return date;
        }
    }
    

    
    /**
     * 返回系统现在年份中指定月份的天数
     * @param 月份month
     * @return 指定月的总天数
     */
    @SuppressWarnings("deprecation")
	public static String getMonthLastDay(int month)
	{
		Date date=new Date();
		int[][] day={{0,30,28,31,30,31,30,31,31,30,31,30,31},
						{0,31,29,31,30,31,30,31,31,30,31,30,31}};	
		int year=date.getYear()+1900;
		if(year%4==0 && year%100!=0 || year%400==0)	
		{
			return day[1][month]+"";
		}
		else
		{
			return day[0][month]+"";
		}
	}
    
    /**
     * 返回指定年份中指定月份的天数
     * @param 年份year
     * @param 月份month
     * @return 指定月的总天数
     */
    public static String getMonthLastDay(int year,int month)
	{
		int[][] day={{0,30,28,31,30,31,30,31,31,30,31,30,31},
						{0,31,29,31,30,31,30,31,31,30,31,30,31}};
		if(year%4==0 && year%100!=0 || year%400==0)	
		{
			return day[1][month]+"";
		}
		else
		{
			return day[0][month]+"";
		}
	}
    
    /**
     * 取得当前时间的日戳
     * @return
     */
    @SuppressWarnings("deprecation")
	public static String getTimestamp(){
    	Date date=new Date();
    	String timestamp=""+(date.getYear()+1900)+date.getMonth()+date.getDate()+date.getMinutes()+date.getSeconds()+date.getTime();
    	return timestamp;
    }
    /**
     * 取得指定时间的日戳
     * @return
     */
    @SuppressWarnings("deprecation")
	public static String getTimestamp(Date date){
    	String timestamp=""+(date.getYear()+1900)+date.getMonth()+date.getDate()+date.getMinutes()+date.getSeconds()+date.getTime();
    	return timestamp;
    }
    public static void main(String[] args){
    	System.out.println(DateUtil.getDate());//获取日期格式为2010-08-12
    	System.out.println(DateUtil.getDateTime());//获取日期格式为2010-08-12 18:08:21
    	System.out.println(DateUtil.getTime());//获取日期格式为18:08:21
    	System.out.println(DateUtil.getYear());//获取当前时间年份2010
    	System.out.println(DateUtil.getMonth());//获取当年时间月份08
    	System.out.println(DateUtil.getStartDate());//获取2010-01-01
    	System.out.println(DateUtil.getEndDate());//2010-08-12
    	System.out.println(DateUtil.getDay());//获得服务器在当前月中已经过了的天数12
    	System.out.println(DateUtil.getMargin("2010-05-02", "2010-04-01"));//比较两个日期相差的天数
    	System.out.println(DateUtil.getDoubleMargin("2010-05-07 23:22:11", "2010-04-01 01:33:33"));
    }
}

 

0
0
分享到:
评论

相关推荐

    java中的日期处理类总结

    Java中的日期处理涉及到多个类,包括Date、Calendar、GregorianCalendar以及日期格式化类如DateFormat和SimpleDateFormat。这些类主要用于管理、操作和格式化日期和时间。以下是对这些类的详细说明: 1. **Date类**...

    java实现的日期操作类

    标题提到的"java实现的日期操作类"通常指的是使用这些类来完成特定的日期计算任务,如获取星期几或计算未来的日期。 `java.util.Date`是Java早期用来表示日期和时间的类,但它的API设计并不理想,易用性较差。因此...

    java操作日期时间工具类

    虽然`Date`类历史悠久,但在Java 8之后,已经不再推荐直接使用,因为它在处理日期时间时有许多不便之处,如格式化、比较等操作不够直观。 `java.util.Calendar`是抽象类,它是日期和时间的日历字段计算的通用日历...

    JAVA日期操作类详细讲解

    本篇内容将深入讲解Java中的日期操作类,这对于Java初学者来说是非常重要的知识点。 首先,我们要了解Java中的基础日期类`java.util.Date`。这个类在早期的Java版本中被广泛使用,但其API设计存在一些问题,例如不...

    Java 农历日期操作工具类

    "Java 农历日期操作工具类" 提供了一种解决方案,通过自定义的类或库来实现农历日期与公历日期之间的转换。这篇博客文章(链接:https://liuwei1981.iteye.com/blog/666916)可能详细介绍了如何创建这样一个工具类,...

    操作日期的java包

    Java编程语言在处理日期和时间时,虽然内建了`java.util.Date`和`java.util.Calendar`类,但它们的使用并不总是那么直观和高效。为了解决这个问题,社区开发了Joda-Time库,它提供了更为强大且易用的日期时间操作...

    Java日期常用操作方法工具类

    本文将重点讲解Java日期的常用操作方法,主要基于提供的`JavaDateUtil.java`文件,假设这是一个自定义的日期工具类。 首先,我们来了解`java.util.Date`。这个类在早期的Java版本中被广泛使用,但它的API设计并不...

    Java常用日期辅助类

    在给定的标题“Java常用日期辅助类”中,我们可以推测这篇博文可能探讨了Java中的一些核心日期处理工具,如`java.util.Date`,`java.time`包中的类,以及自定义的日期助手类`DateHelper.java`。 `java.util.Date`是...

    Java日期操作接口

    回到我们的主题——"Java日期操作接口",可能是指自定义的一个接口,用于扩展或封装Java的日期处理功能。`DateFilter.java`可能是实现这个接口的类,它可能包含了一些过滤或者操作日期的方法,比如按照特定条件筛选...

    Java的日期时间处理类讲解代码( Date 、Calendar、SimpleDateFormat、LocalDateTime)

    2、时区处理:了解如何使用Java日期时间类处理多时区的情况,包括转换、调整时差、比较等操作。 3、计划任务与调度:学习如何使用日期时间类来实现计划任务和调度功能,例如定时执行任务、定期触发事件等。 4、日历...

    java日期工具类

    然而,由于`Date`类存在一些设计上的不足,如不便于格式化和处理时区等问题,后来Java引入了`java.time`包,提供了一系列更加强大和易用的日期时间API。本文将深入探讨`java.util.Date`和`java.time`包中的日期工具...

    java语言日期处理大全

    `java.util.Calendar`类提供了日期操作的高级功能,如`add()`方法可以对日期进行加减运算。例如,`now.add(Calendar.DAY_OF_YEAR, -(365*2))`表示减去两年。 8. **日期比较**: `equals()`, `before()`, `after()...

    java 日期帮助类

    Java 日期帮助类是编程中不可或缺的部分,尤其是在处理时间日期相关的业务逻辑时。在这个Java 日期帮助类中,包含了多达...这个类的完整实现和所有方法的详细说明,将对任何涉及日期时间处理的Java应用都是极大的福音。

    Java中日期处理的代码

    通过以上分析可以看出,示例代码涵盖了 Java 日期处理的基本功能,包括日期格式的定义、日期与字符串之间的转换以及对日期进行操作的方法。这些知识点对于开发人员来说是非常实用的,能够帮助他们在实际项目中高效地...

    java处理日期合并

    本文详细介绍了如何使用Java处理日期合并的问题,通过对`TimeoffDateDTO`类的定义和日期合并算法的具体实现,提供了一种有效的方法来解决实际工作中经常遇到的时间段重叠问题。这种方法不仅适用于员工请假时间的管理...

    java 日期操作工具类:包括计算两个时间相差距离多少天多少小时多少分多少秒

    这篇博客文章“java 日期操作工具类:包括计算两个时间相差距离多少天多少小时多少分多少秒”提供了一个实用的工具类,帮助开发者更方便地处理日期和时间差异。下面将详细解释这个工具类中的关键知识点。 1. **Java...

    java日期操作大全

    以下是对给定内容中涉及的Java日期操作进行的详细说明: 1. **获取指定月份的第一天**: 使用`java.util.Calendar`类可以方便地获取指定日期所在月份的第一天。首先,将输入的日期字符串转换为`java.util.Date`...

    日期类的加减及java中所以日期类的操作算法大全

    通过以上介绍,我们了解了Java中日期类的基本操作,包括日期的创建、转换、格式化、比较、加减等,这对于开发涉及日期处理的应用程序至关重要。掌握了这些技能,开发者可以更加灵活地管理应用程序中的时间逻辑,提高...

    JAVA处理日期时间常用方法

    首先,`java.util.Calendar`是一个抽象类,它提供了对日期和时间的高级操作。例如,你可以创建一个新的Calendar实例来获取当前的日期和时间,如`Calendar.getInstance()`。然后,你可以通过`add()`方法来增加或减少...

Global site tag (gtag.js) - Google Analytics