`
还有也许
  • 浏览: 169215 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

日期比较与转换集合

    博客分类:
  • java
 
阅读更多

近段时间关于日期的东西真是太烦人了,又是日期转换又是日期比较的,根据“合格的程序员就是不写重复代码的程序员”的指示精神。总结了一些,写了一个比较全的日期类,可以打成jar包来用。

package com.running.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * <p>Name: 日期工具类(DateUtils)</p>
 * <p>Author:		No24</p>
 * <p>Date:		2006-9-12 12:22:40</p>
 * <p>Modifier:			Fifth</p>
 * <p>DateLastModified:	2008-7-21 17:07</p>
 * <p>Version:		V1.0.1</p>
 * <p>Description:	</p>
 * <p>Remark:		提供一些常用的日期方法
 * 				V1.0.1版本添加了getDate的默认方法
 * </p>
 * <p>Copyright:	Copyright (c) No24 All rights reserved.</p>
 * <p>Company: XCY</p>
 * @author No24
 * @version 1.0
 */

public abstract class DateUtils {
	
    private static final String DEFAULT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
	
    /**
     * 按指定格式获得当前日期字符串
     * @param format 格式字符串
     * @return 返回指定格式的当前日期字符串
     */
    public static String getDate(String format) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }
    
    /**
     * 按默认的格式获得当前日期字符串
     * @param format 格式字符串
     * @return 返回指定格式的当前日期字符串
     */
    public static String getDate(){
		return new SimpleDateFormat(DEFAULT_DATE_TIME).format(new Date());
	}

    /**
     * 按指定格式获得指定日期字符串
     * @param format 格式字符串
     * @param date 指定日期
     * @return 返回指定格式的指定日期字符串
     */
    public static String getDate(String format, Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }
    
    /**
     * 获得指定日期前面或后面某小时的日期
     * @param date 日期
     * @param i 相差的小时数(负值为前面的日期)
     * @return 返回指定日期前面或后面某小时的日期
     */
    public static Date relationSecond(Date date, int i) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.SECOND, i);
        return cal.getTime();
    }
    
    /**
     * 获得指定日期前面或后面某小时的日期
     * @param date 日期
     * @param i 相差的小时数(负值为前面的日期)
     * @return 返回指定日期前面或后面某小时的日期
     */
    public static Date relationMinute(Date date, int i) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MINUTE, i);
        return cal.getTime();
    }
    
    /**
     * 获得指定日期前面或后面某小时的日期
     * @param date 日期
     * @param i 相差的小时数(负值为前面的日期)
     * @return 返回指定日期前面或后面某小时的日期
     */
    public static Date relationHour(Date date, int i) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.HOUR, i);
        return cal.getTime();
    }
    
    /**
     * 获得指定日期前面或后面某天的日期
     * @param date 日期
     * @param i 相差的天数(负值为前面的日期)
     * @return 返回指定日期前面或后面某天的日期
     */
    public static Date relationDate(Date date, int i) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, i);
        return cal.getTime();
    }
    
    
    /**
     * 获得指定日期前面或后面某月的日期
     * @param date 日期
     * @param i 相差的月数(负值为前面的日期)
     * @return 返回指定日期前面或后面某天的日期
     */
    public static Date relationMonth(Date date, int i) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, i);
        return cal.getTime();
    }

    /**
     * 转换日期字符串成日期对象
     * @param s 日期字符串
     * @return 返回日期对象
     * @throws  Exception
     */
    public static Date parseDate(String s) throws Exception {
        DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT,new Locale("zh", "CN"));
        return df.parse(s);
    }
    
    public static Date parseDate(String s,String format) throws Exception {
    	SimpleDateFormat sdf = null;
    	if (format == null) {
    		sdf = new SimpleDateFormat(DEFAULT_DATE_TIME);
    	} else {
    		sdf = new SimpleDateFormat(format);
    	}
    	return sdf.parse(s);
    }
    
    public static String getDirDate(){
    	Calendar calendar = Calendar.getInstance();
    	return calendar.get(Calendar.YEAR) + "/"+ (calendar.get(Calendar.MONTH)+1) + "/" + calendar.get(Calendar.DAY_OF_MONTH) + "/";
    }
   // public static 
    //2011-1-14 闫振伟添加
  //获得指定日期的本月最初时间和最后时间
	public static String getDate(int num,Date date){
		String stringDate="";
		SimpleDateFormat sf=null;
		
		if(num==1){
			sf=new SimpleDateFormat("yyyy-MM");
			stringDate=sf.format(date)+"-"+getFirstDayOfMonth(new Date())+" 00:00:00";
		}else if(num==2){
			sf=new SimpleDateFormat("yyyy-MM");
			int lastDay=getLastDayOfMonth(new Date());
			stringDate=sf.format(date)+"-"+lastDay+" 23:59:59";
		}
		return stringDate;
	}
	//获得某个月的第一天
	private static int getFirstDayOfMonth(Date a){
		
	    Calendar   b   =   Calendar.getInstance(); 
	    b.setTime(a); 
	    int   firstDay   =   b.getActualMinimum(Calendar.DAY_OF_MONTH); 
	    return firstDay;
	}
	//获得某个月的最后一天
	private static int getLastDayOfMonth(Date a){
		
	    Calendar   b   =   Calendar.getInstance(); 
	    b.setTime(a); 
	    int   lastDay   =   b.getActualMaximum(Calendar.DAY_OF_MONTH); 
	    return lastDay;
	}
	/**    
     * @param date1 需要比较的时间 不能为空(null),需要正确的日期格式 ,如:2009-09-12   
     * @param date2 被比较的时间  为空(null)则为当前时间    
     * @param stype 返回值类型   0为多少天,1为多少个月,2为多少年    
     * @return    
     * 举例:  
     * compareDate("2009-09-12", null, 0);//比较天  
     * compareDate("2009-09-12", null, 1);//比较月  
     * compareDate("2009-09-12", null, 2);//比较年  
     */
	public static int compareDate(String startDay,String endDay,int stype){     
        int n = 0;     
        String[] u = {"天","月","年"};     
        String formatStyle = stype==1?"yyyy-MM":"yyyy-MM-dd";     
             
        endDay = endDay==null?getCurrentDate("yyyy-MM-dd"):endDay;     
             
        DateFormat df = new SimpleDateFormat(formatStyle);     
        Calendar c1 = Calendar.getInstance();     
        Calendar c2 = Calendar.getInstance();     
        try {     
            c1.setTime(df.parse(startDay));     
            c2.setTime(df.parse(endDay));     
        } catch (Exception e3) {     
            System.out.println("时间在初始化时出错!");     
        }     
        //List list = new ArrayList();     
        while (!c1.after(c2)) {                   // 循环对比,直到相等,n 就是所要的结果     
            //list.add(df.format(c1.getTime()));    // 这里可以把间隔的日期存到数组中 打印出来     
            n++;     
            if(stype==1){     
                c1.add(Calendar.MONTH, 1);          // 比较月份,月份+1     
            }     
            else{     
                c1.add(Calendar.DATE, 1);           // 比较天数,日期+1     
            }     
        }     
        n = n-1;     
        if(stype==2){     
            n = (int)n/365;     
        }        
        //System.out.println(startDay+" -- "+endDay+" 相差多少"+u[stype]+":"+n);           
        return n;     
    }      
	public static String compareTime(String startTime,String endTime,String format){
		Calendar c1 = Calendar.getInstance();     
        Calendar c2 = Calendar.getInstance();     
        DateFormat df = new SimpleDateFormat(format);
        try {     
            c1.setTime(df.parse(startTime));     
            c2.setTime(df.parse(endTime));     
        } catch (Exception e3) {     
            System.out.println("时间在初始化时出错!");     
        }
        if(c1.after(c2)){
        	return "after";
        }else if(c2.after(c1)){
        	return "before";
        }else{
        	return "equals";
        }
	}
	
	public static String getCurrentDate(String format){   
        Calendar day=Calendar.getInstance();    
        day.add(Calendar.DATE,0);    
        SimpleDateFormat sdf=new SimpleDateFormat(format);//"yyyy-MM-dd"   
        String date = sdf.format(day.getTime());   
        return date;   
    } 
    public static void main(String[] args){
    	//按指定类型获得当前时间
    	String date1=DateUtils.getDate("今天是 yyyy-MM-dd");
    	//按默认格式获得当前时间,默认格式是yyyy-MM-dd hh:mm:ss
        String date2=DateUtils.getDate();
        //按指定格式格式化指定日期
        String date3=DateUtils.getDate("yyyy--MM--dd",new Date());
        //获得指定日期前后的天数
        Date date4=DateUtils.relationDate(new Date(), 0);
      //获得指定日期前后的月数
        Date date5=DateUtils.relationMonth(new Date(), 0);
      //获得指定日期前后的小时数
        Date date6=DateUtils.relationHour(new Date(), -1);
      //获得指定日期前后的分钟数
        Date date7=DateUtils.relationMinute(new Date(), -1);
      //获得指定日期前后的秒数
        Date date8=DateUtils.relationSecond(new Date(), -1);
        
        //将日期字符串转换为日期对象
        try {
			Date date9=DateUtils.parseDate("2010-11-11");
			System.out.println(DateUtils.getDate("yyyy-MM-dd", date9));
			Date date10=DateUtils.parseDate("2010-11-11 19:23:59","yyyy-MM-dd hh:mm:ss");
			String date11=DateUtils.getDirDate();
			System.out.println("-------------");
			System.out.println("date9="+date9);
		    System.out.println("date10="+date10);
		    System.out.println(date11);
		    System.out.println("-------------");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    System.out.println(date1);
	    System.out.println(date2);
	    System.out.println(date3);
	    System.out.println(date4);
	    System.out.println(date5);
	    System.out.println(date6);
	    System.out.println(date7);
	    System.out.println(date8);
	    String date12=DateUtils.getDate(1, new Date());
	    System.out.println(date12);
	    String date13=DateUtils.getDate(2, new Date());
	    System.out.println(date13);
	    int date14=DateUtils.getLastDayOfMonth(new Date());
	    System.out.println(date14);
	    int date15=DateUtils.getFirstDayOfMonth(new Date());
	    System.out.println(date15);
    }
}

 

附上我的API,大家看了之后要多提建议呀。

1
0
分享到:
评论
2 楼 还有也许 2011-01-18  
jamesji 写道
It should be a final class instead of abstract class.

Your advice was very much to the point.
1 楼 jamesji 2011-01-14  
It should be a final class instead of abstract class.

相关推荐

    日期_进制转换_时间戳

    日期转换工具可以帮助将日期从一种格式转换为另一种,或者从人类可读的格式转换为计算机友好的格式(如Unix时间戳)。这对于处理跨时区、解析用户输入或与其他系统交换日期信息的情况非常有用。 4. **时间戳转换**...

    SQL Sever日期转换函数集合

    为了更好地操作、显示或存储日期和时间信息,SQL Server提供了多种内置的日期转换函数,其中最为常用的就是`CONVERT`函数。`CONVERT`函数允许将日期时间值转换为不同的字符串格式,这对于数据展示和兼容性处理尤为...

    处理JSON日期转换

    在实际应用中,处理JSON日期转换时,还需要考虑时区问题,因为JSON数据可能来自不同的时区。`json-lib`库允许自定义日期格式和时间戳格式,以确保在解析和序列化时的一致性。此外,现在的许多项目更倾向于使用`...

    日期转换程序

    在IT领域,日期转换是一项常见的任务,特别是在编程中。Java作为一种广泛使用的编程语言,提供了丰富的API来处理日期和时间的转换。本项目“日期转换程序”显然是一个利用Java实现的工具,它能够帮助开发者将日期从...

    json工具类,java日期转换,字符串转换等各种工具类

    2. **Java日期转换**: Java中的日期和时间处理最初通过`java.util.Date`和`java.text.SimpleDateFormat`进行,但现在推荐使用`java.time`包下的API,如`LocalDate`、`LocalDateTime`和`DateTimeFormatter`等,这些...

    非常强大的日期格式化函数集合

    当用来格式化日期时,它能够将日期转换为指定格式的字符串。在本文档中,我们将详细介绍如何使用 `CONVERT` 函数来格式化日期,并通过具体的例子来展示各种格式化的结果。 #### 2. 使用 `CONVERT` 函数格式化日期 ...

    PB9.0 日期控件集合

    它可能包含了转换公历与农历日期的功能,以及显示中国传统节气等附加信息。 2. 日历控件(修改): 这个控件可能是对标准PowerBuilder日期控件的改进版本,可能包含额外的特性或优化。修改可能包括更友好的用户界面...

    android Gson转换List集合demo

    在这个"android Gson转换List集合demo"中,我们将深入探讨如何使用Gson库来处理Android应用程序中的List集合与JSON之间的转换。 1. **Gson库介绍** Gson是一个开源库,它允许开发者将Java对象转换成对应的JSON格式...

    定时和日期操作源码大集合

    2. **日期函数与时间函数** - `Now`:返回当前日期和时间。 - `Date`:返回当前日期,不包含时间部分。 - `Time`:返回当前时间,不包含日期部分。 - `DateSerial`:根据指定年、月、日创建日期。 - `DateValue...

    Excel数据转换成对象集合

    在数据转换场景中,可以创建自定义注解,如`@CellIndex`,用于指定对象属性与Excel单元格的索引关联。这样,解析Excel数据时,可以根据注解自动映射到相应的属性,简化了代码。 6. **资源源代码**: 压缩包中的...

    日期转换的工具类

    "日期转换的工具类" 提供了方便的方法来处理日期相关的转换工作,比如将日期转换为星期,将毫秒数转化为日期,反之亦然,以及将日期转化为用户友好的显示格式,如“刚刚”,“几分钟前”,“几小时前”,“昨天”等...

    json 转换成 bean集合 example

    将JSON转换为Bean集合是Java开发中的常见操作,这有助于我们将接收到的JSON数据映射到对应的Java对象上,便于后续的业务处理。本篇将详细讲解如何实现这一过程,并提供一个具体的示例。 首先,我们需要理解JSON的...

    java计算两个日期之间的天数集合

    2. **日期解析**:通过`SimpleDateFormat`的`parse()`方法,将字符串形式的开始和结束日期转换为`Date`类型,便于后续操作。 3. **循环计算日期**:使用`Calendar`类来遍历开始日期到结束日期之间的每一天。初始化`...

    struts2枚举值、日期值转换示例

    自定义日期转换器也需要实现`Converter`接口,但在`convert`方法内,我们需要处理日期字符串到`java.util.Date`对象的转换。可以使用`SimpleDateFormat`类来解析日期字符串,然后将其转换为日期对象。需要注意的是,...

    java获取某年某月到某年某月按天的切片日期集合(间隔天数的集合)、获取某年某月按天切片日期集合(某个月间隔多少天的日期集合)

    java获取某年某月到某年某月按天的切片日期集合(间隔天数的集合)、获取某年某月按天切片日期集合(某个月间隔多少天的日期集合)、指定天的开始和结束日期、返回某个日期前几天的日期并转换成字符串

    ORACLE常用日期函数集合

    在Oracle中,`to_char()`函数被广泛用于将日期转换为指定格式的字符串。以下是一些常见的格式化选项: 1. **年份格式** - `Y`: 返回世纪年的最后一位。 ```sql SELECT to_char(sysdate, 'Y') FROM dual; ``` -...

    vopo转换工具类及所需jar

    2. Apache Commons Lang:提供了大量的实用工具方法,对于字符串处理、日期时间操作等有很大帮助。 3. javax.validation:这是一个验证API,如果`ValidatorHelper.java`涉及到数据验证,那么这个库可能是必需的。 4....

    Java中各个数据类型之间的转换

    `String`到`Date`的转换需解析日期字符串,`Date`到`String`则是格式化日期。 在进行数据类型转换时,需要注意以下几点: - 转换可能导致精度损失,尤其是从大类型到小类型。 - 转换可能引发溢出,当转换后的数值...

    纯JAVA计算日期的农历节日、公历节日代码!

    - 对于农历节日,存储农历日期,并编写转换为公历日期的方法,然后进行比较。 - 创建一个节日集合,包含所有节日的实例,通过传入日期查询当前日期对应的节日。 6. **TestDate文件**: - 这个文件可能是测试代码...

Global site tag (gtag.js) - Google Analytics