`
izuoyan
  • 浏览: 9220847 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

日期工具类

阅读更多

package commons.util;


import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import java.util.Calendar;
import java.util.Date;


/**
* 日期工具类
*/
public class DateHelper
{
/**
* 时间范围:年
*/
public static final int YEAR = 1;

/**
* 时间范围:季度
*/
public static final int QUARTER = 2;

/**
* 时间范围:月
*/
public static final int MONTH = 3;

/**
* 时间范围:旬
*/
public static final int TENDAYS = 4;

/**
* 时间范围:周
*/
public static final int WEEK = 5;

/**
* 时间范围:日
*/
public static final int DAY = 6;

/* 基准时间 */
private Date fiducialDate = null;
private Calendar cal = null;


private DateHelper(Date fiducialDate)
{
if (fiducialDate != null)
{
this.fiducialDate = fiducialDate;
}
else
{
this.fiducialDate = new Date(System.currentTimeMillis());
}

this.cal = Calendar.getInstance();
this.cal.setTime(this.fiducialDate);
this.cal.set(Calendar.HOUR_OF_DAY, 0);
this.cal.set(Calendar.MINUTE, 0);
this.cal.set(Calendar.SECOND, 0);
this.cal.set(Calendar.MILLISECOND, 0);

this.fiducialDate = this.cal.getTime();
}


/**
* 获取DateHelper实例
* @param fiducialDate
* 基准时间
* @return
*/
public static DateHelper getInstance(Date fiducialDate)
{
return new DateHelper(fiducialDate);
}

/**
* 获取DateHelper实例, 使用当前时间作为基准时间
* @return
*/
public static DateHelper getInstance()
{
return new DateHelper(null);
}


/**
* 获取年的第一天
* @param offset
* 偏移量
* @return
*/
public Date getFirstDayOfYear(int offset)
{
cal.setTime(this.fiducialDate);
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}

/**
* 获取年的最后一天
* @param offset
* 偏移量
* @return
*/
public Date getLastDayOfYear(int offset)
{
cal.setTime(this.fiducialDate);
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset);
cal.set(Calendar.MONTH, Calendar.DECEMBER);
cal.set(Calendar.DAY_OF_MONTH, 31);
return cal.getTime();
}

/**
* 获取季度的第一天
* @param offset
* 偏移量
* @return
*/
public Date getFirstDayOfQuarter(int offset)
{
cal.setTime(this.fiducialDate);
cal.add(Calendar.MONTH, offset * 3);
int mon = cal.get(Calendar.MONTH);
if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH)
{
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 1);
}
if (mon >= Calendar.APRIL && mon <= Calendar.JUNE)
{
cal.set(Calendar.MONTH, Calendar.APRIL);
cal.set(Calendar.DAY_OF_MONTH, 1);
}
if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER)
{
cal.set(Calendar.MONTH, Calendar.JULY);
cal.set(Calendar.DAY_OF_MONTH, 1);
}
if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER)
{
cal.set(Calendar.MONTH, Calendar.OCTOBER);
cal.set(Calendar.DAY_OF_MONTH, 1);
}
return cal.getTime();
}

/**
* 获取季度的最后一天
* @param offset
* 偏移量
* @return
*/
public Date getLastDayOfQuarter(int offset)
{
cal.setTime(this.fiducialDate);
cal.add(Calendar.MONTH, offset * 3);

int mon = cal.get(Calendar.MONTH);
if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH)
{
cal.set(Calendar.MONTH, Calendar.MARCH);
cal.set(Calendar.DAY_OF_MONTH, 31);
}
if (mon >= Calendar.APRIL && mon <= Calendar.JUNE)
{
cal.set(Calendar.MONTH, Calendar.JUNE);
cal.set(Calendar.DAY_OF_MONTH, 30);
}
if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER)
{
cal.set(Calendar.MONTH, Calendar.SEPTEMBER);
cal.set(Calendar.DAY_OF_MONTH, 30);
}
if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER)
{
cal.set(Calendar.MONTH, Calendar.DECEMBER);
cal.set(Calendar.DAY_OF_MONTH, 31);
}
return cal.getTime();
}

/**
* 获取月的最后一天
* @param offset
* 偏移量
* @return
*/
public Date getFirstDayOfMonth(int offset)
{
cal.setTime(this.fiducialDate);
cal.add(Calendar.MONTH, offset);
cal.set(Calendar.DAY_OF_MONTH, 1);
return cal.getTime();
}

/**
* 获取月的最后一天
* @param offset
* 偏移量
* @return
*/
public Date getLastDayOfMonth(int offset)
{
cal.setTime(this.fiducialDate);
cal.add(Calendar.MONTH, offset + 1);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}

/**
* 获取旬的第一天
* @param offset
* 偏移量
* @return
*/
public Date getFirstDayOfTendays(int offset)
{
cal.setTime(this.fiducialDate);
int day = cal.get(Calendar.DAY_OF_MONTH);
if (day >= 21)
{
day = 21;
}
else if (day >= 11)
{
day = 11;
}
else
{
day = 1;
}

if (offset > 0)
{
day = day + 10 * offset;
int monOffset = day / 30;
day = day % 30;
cal.add(Calendar.MONTH, monOffset);
cal.set(Calendar.DAY_OF_MONTH, day);
}
else
{
int monOffset = 10 * offset / 30;
int dayOffset = 10 * offset % 30;
if ((day + dayOffset) > 0)
{
day = day + dayOffset;
}
else
{
monOffset = monOffset - 1;
day = day - dayOffset - 10;
}
cal.add(Calendar.MONTH, monOffset);
cal.set(Calendar.DAY_OF_MONTH, day);
}
return cal.getTime();
}

/**
* 获取旬的最后一天
* @param offset
* 偏移量
* @return
*/
public Date getLastDayOfTendays(int offset)
{
Date date = getFirstDayOfTendays(offset + 1);
cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH, -1);
return cal.getTime();
}

/**
* 获取周的第一天(MONDAY)
* @param offset
* 偏移量
* @return
*/
public Date getFirstDayOfWeek(int offset)
{
cal.setTime(this.fiducialDate);
cal.add(Calendar.DAY_OF_MONTH, offset * 7);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return cal.getTime();
}

/**
* 获取周的最后一天(SUNDAY)
* @param offset
* 偏移量
* @return
*/
public Date getLastDayOfWeek(int offset)
{
cal.setTime(this.fiducialDate);
cal.add(Calendar.DAY_OF_MONTH, offset * 7);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.add(Calendar.DAY_OF_MONTH, 6);
return cal.getTime();
}

/**
* 获取指定时间范围的第一天
* @param dateRangeType
* 时间范围类型
* @param offset
* 偏移量
* @return
*/
private Date getFirstDate(int dateRangeType, int offset)
{
return null;
}

/**
* 获取指定时间范围的最后一天
* @param dateRangeType
* 时间范围类型
* @param offset
* 偏移量
* @return
*/
private Date getLastDate(int dateRangeType, int offset)
{
return null;
}

/**
* 根据日历的规则,为基准时间添加指定日历字段的时间量
* @param field
* 日历字段, 使用Calendar类定义的日历字段常量
* @param offset
* 偏移量
* @return
*/
public Date add(int field, int offset)
{
cal.setTime(this.fiducialDate);
cal.add(field, offset);
return cal.getTime();
}

/**
* 根据日历的规则,为基准时间添加指定日历字段的单个时间单元
* @param field
* 日历字段, 使用Calendar类定义的日历字段常量
* @param up
* 指定日历字段的值的滚动方向。true:向上滚动 / false:向下滚动
* @return
*/
public Date roll(int field, boolean up)
{
cal.setTime(this.fiducialDate);
cal.roll(field, up);
return cal.getTime();
}

/**
* 把字符串转换为日期
* @param dateStr
* 日期字符串
* @param format
* 日期格式
* @return
*/
public static Date strToDate(String dateStr, String format)
{
Date date = null;

if (dateStr != null && (!dateStr.equals("")))
{
DateFormat df = new SimpleDateFormat(format);
try
{
date = df.parse(dateStr);
}
catch (ParseException e)
{
e.printStackTrace();
}
}
return date;
}

/**
* 把字符串转换为日期,日期的格式为yyyy-MM-dd HH:ss
* @param dateStr
* 日期字符串
* @return
*/
public static Date strToDate(String dateStr)
{
Date date = null;

if (dateStr != null && (!dateStr.equals("")))
{
if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2}"))
{
dateStr = dateStr + " 00:00";
}
else if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}"))
{
dateStr = dateStr + ":00";
}
else
{
System.out.println(dateStr + " 格式不正确");
return null;
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:ss");
try
{
date = df.parse(dateStr);
}
catch (ParseException e)
{
e.printStackTrace();
}
}
return date;
}

/**
* 把日期转换为字符串
* @param date
* 日期实例
* @param format
* 日期格式
* @return
*/
public static String dateToStr(Date date, String format)
{
return (date == null)? "":
new SimpleDateFormat(format).format(date);
}

/**
* 取得当前日期 年-月-日
* @return
*/
public static String getCurrentDate()
{
DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
return f.format(Calendar.getInstance().getTime());
}


public static void main(String[] args)
{
DateHelper dateHelper = DateHelper.getInstance();

/* Year */
for (int i = -5; i <= 5; i++)
{
System.out.println("FirstDayOfYear(" + i + ") = " +
dateHelper.getFirstDayOfYear(i));
System.out.println("LastDayOfYear(" + i + ") = " +
dateHelper.getLastDayOfYear(i));
}

/* Quarter */
for (int i = -5; i <= 5; i++)
{
System.out.println("FirstDayOfQuarter(" + i + ") = " +
dateHelper.getFirstDayOfQuarter(i));
System.out.println("LastDayOfQuarter(" + i + ") = " +
dateHelper.getLastDayOfQuarter(i));
}

/* Month */
for (int i = -5; i <= 5; i++)
{
System.out.println("FirstDayOfMonth(" + i + ") = " +
dateHelper.getFirstDayOfMonth(i));
System.out.println("LastDayOfMonth(" + i + ") = " +
dateHelper.getLastDayOfMonth(i));
}

/* Week */
for (int i = -5; i <= 5; i++)
{
System.out.println("FirstDayOfWeek(" + i + ") = " +
dateHelper.getFirstDayOfWeek(i));
System.out.println("LastDayOfWeek(" + i + ") = " +
dateHelper.getLastDayOfWeek(i));
}

/* Tendays */
for (int i = -5; i <= 5; i++)
{
System.out.println("FirstDayOfTendays(" + i + ") = " +
dateHelper.getFirstDayOfTendays(i));
System.out.println("LastDayOfTendays(" + i + ") = " +
dateHelper.getLastDayOfTendays(i));
}


}

}

分享到:
评论

相关推荐

    Java日期工具类

    Java日期工具类 1、日期的各种格式化 2、获取当前年度 3、获取当前月份 4、获取当前天号数 5、获取当前时间往前推一个月的时间 6、获取上个月("MMM yyyy") 7、获取上个月("yyyymm") 8、获取上个月("yyyy-mm") 9、...

    java日期工具类

    java日期工具类,java日期工具类,java日期工具类,java日期工具类

    DateUtils(日期工具类)

    DateUtils(日期工具类),包含日期格式化,解析等。

    日期工具类源码

    日期工具类

    日期工具类,包括各种日期之间的转换

    根据提供的文件信息,本文将对日期工具类进行深入解析,并详细介绍其包含的主要功能与实现方法。此工具类主要涉及到了日期格式化、日期解析、获取当前时间等实用操作。 ### 一、概述 该日期工具类名为 `DateUtil`...

    原创好用实用的日期工具类

    强大的好用的原创日期工具类: 1.返回当前日期字符串 yyyy-MM-dd 2.返回当前日期字符串 yyyy-MM-dd HH:mm:ss 3.根据指定时间格式解析日期字符串为Date对象 4.根据默认时间格式解析日期字符串为Date对象 5.根据指定...

    Java日期工具类,学习代码

    Java日期工具类是Java开发中不可或缺的一部分,它们用于处理日期和时间相关的操作。在Java中,日期和时间处理涉及到多个类和接口,如`java.util.Date`、`java.util.Calendar`、`java.text.SimpleDateFormat`以及Java...

    Java日期工具类,Java时间工具类,Java时间格式化

    本篇将围绕Java中的日期工具类和时间工具类展开讨论,同时会涉及到日期时间的格式化。 首先,Java 8之前,我们主要依赖`java.util.Date`和`java.text.SimpleDateFormat`这两个类来处理日期和时间。`Date`类用于表示...

    史上最全的日期工具类

    各种你能想到的日期计算,操作。包含常见的年月日间隔计算、比较、格式化

    时间日期工具类(包含java8新特性).zip

    `时间日期工具类`是提升开发效率的关键,它们提供了对日期和时间进行格式化、比较、计算等操作的便捷方法。在这个"时间日期工具类(包含java8新特性).zip"压缩包中,我们有两个文件:DateUtil.java和DateUtils.java...

Global site tag (gtag.js) - Google Analytics