`
kangaroo_xin
  • 浏览: 3786 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个简单的日期工具类,计算周月季度相关值

    博客分类:
  • Java
阅读更多

自己写的一个简单的日期工具类,做报表的同学也许会用到。

 

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 *
 * @author px
 * @date 2010-04-26
 *
 */
public class DateUtils {

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

	public static final String YYYYMMDD = "yyyy-MM-dd";

	public static final String YYYYMMDD_ZH = "yyyy年MM月dd日";

	public static final int FIRST_DAY_OF_WEEK = Calendar.MONDAY; //中国周一是一周的第一天

	/**
	 *
	 * @param strDate
	 * @return
	 */
	public static Date parseDate(String strDate) {
		return parseDate(strDate, null);
	}

	/**
	 * parseDate
	 *
	 * @param strDate
	 * @param pattern
	 * @return
	 */
	public static Date parseDate(String strDate, String pattern) {
		Date date = null;
		try {
			if(pattern == null) {
				pattern = YYYYMMDD;
			}
			SimpleDateFormat format = new SimpleDateFormat(pattern);
			date = format.parse(strDate);
		} catch (Exception e) {
			logger.error("parseDate error:" + e);
		}
		return date;
	}

	/**
	 * format date
	 *
	 * @param date
	 * @return
	 */
	public static String formatDate(Date date) {
		return formatDate(date, null);
	}

	/**
	 * format date
	 *
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String formatDate(Date date, String pattern) {
		String strDate = null;
		try {
			if(pattern == null) {
				pattern = YYYYMMDD;
			}
			SimpleDateFormat format = new SimpleDateFormat(pattern);
			strDate = format.format(date);
		} catch (Exception e) {
			logger.error("formatDate error:", e);
		}
		return strDate;
	}

	/**
	 * 取得一年的第几周
	 *
	 * @param date
	 * @return
	 */
	public static int getWeekOfYear(Date date){
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int week_of_year = c.get(Calendar.WEEK_OF_YEAR);
		return week_of_year - 1;
	}

	/**
	 * getWeekBeginAndEndDate
	 *
	 * @param date
	 * @param pattern
	 * @return
	 */
	public static String getWeekBeginAndEndDate(Date date, String pattern){
		Date monday = getMondayOfWeek(date);
		Date sunday = getSundayOfWeek(date);
		return formatDate(monday, pattern) + " - " + formatDate(sunday, pattern) ;
	}

	/**
	 * 根据日期取得对应周周一日期
	 *
	 * @param date
	 * @return
	 */
	public static Date getMondayOfWeek(Date date) {
		Calendar monday = Calendar.getInstance();
		monday.setTime(date);
		monday.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		monday.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
		return monday.getTime();
	}

	/**
	 * 根据日期取得对应周周日日期
	 *
	 * @param date
	 * @return
	 */
	public static Date getSundayOfWeek(Date date) {
		Calendar sunday = Calendar.getInstance();
		sunday.setTime(date);
		sunday.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		sunday.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
		return sunday.getTime();
	}

	/**
	 * 取得月的剩余天数
	 *
	 * @param date
	 * @return
	 */
	public static int getRemainDayOfMonth(Date date) {
		int dayOfMonth = getDayOfMonth(date);
		int day = getPassDayOfMonth(date);
		return dayOfMonth - day;
	}

	/**
	 * 取得月已经过的天数
	 *
	 * @param date
	 * @return
	 */
	public static int getPassDayOfMonth(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		return c.get(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 取得月天数
	 *
	 * @param date
	 * @return
	 */
	public static int getDayOfMonth(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		return c.getActualMaximum(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 取得月第一天
	 *
	 * @param date
	 * @return
	 */
	public static Date getFirstDateOfMonth(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.set(Calendar.DAY_OF_MONTH, c.getActualMinimum(Calendar.DAY_OF_MONTH));
		return c.getTime();
	}

	/**
	 * 取得月最后一天
	 *
	 * @param date
	 * @return
	 */
	public static Date getLastDateOfMonth(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));
		return c.getTime();
	}

	/**
	 * 取得季度第一天
	 *
	 * @param date
	 * @return
	 */
	public static Date getFirstDateOfSeason(Date date) {
		return getFirstDateOfMonth(getSeasonDate(date)[0]);
	}

	/**
	 * 取得季度最后一天
	 *
	 * @param date
	 * @return
	 */
	public static Date getLastDateOfSeason(Date date) {
		return getLastDateOfMonth(getSeasonDate(date)[2]);
	}

	/**
	 * 取得季度天数
	 * @param date
	 * @return
	 */
	public static int getDayOfSeason(Date date) {
		int day = 0;
		Date[] seasonDates  = getSeasonDate(date);
		for (Date date2 : seasonDates) {
			day += getDayOfMonth(date2);
		}
		return day;
	}

	/**
	 * 取得季度剩余天数
	 *
	 * @param date
	 * @return
	 */
	public static int getRemainDayOfSeason(Date date) {
		return getDayOfSeason(date) - getPassDayOfSeason(date);
	}

	/**
	 * 取得季度已过天数
	 *
	 * @param date
	 * @return
	 */
	public static int getPassDayOfSeason(Date date) {
		int day = 0;

		Date[] seasonDates  = getSeasonDate(date);

		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int month = c.get(Calendar.MONTH);

		if(month == Calendar.JANUARY || month == Calendar.APRIL || month == Calendar.JULY || month == Calendar.OCTOBER) {//季度第一个月
			day = getPassDayOfMonth(seasonDates[0]);
		} else if(month == Calendar.FEBRUARY || month == Calendar.MAY || month == Calendar.AUGUST || month == Calendar.NOVEMBER) {//季度第二个月
			day = getDayOfMonth(seasonDates[0]) + getPassDayOfMonth(seasonDates[1]);
		} else if(month == Calendar.MARCH || month == Calendar.JUNE || month == Calendar.SEPTEMBER || month == Calendar.DECEMBER) {//季度第三个月
			day = getDayOfMonth(seasonDates[0]) + getDayOfMonth(seasonDates[1]) + getPassDayOfMonth(seasonDates[2]);
		}
		return day;
	}

	/**
	 * 取得季度月
	 *
	 * @param date
	 * @return
	 */
	public static Date[] getSeasonDate(Date date) {
		Date[] season = new Date[3];

		Calendar c = Calendar.getInstance();
		c.setTime(date);

		int nSeason = getSeason(date);
		if(nSeason == 1) {//第一季度
			c.set(Calendar.MONTH, Calendar.JANUARY);
			season[0] = c.getTime();
			c.set(Calendar.MONTH, Calendar.FEBRUARY);
			season[1] = c.getTime();
			c.set(Calendar.MONTH, Calendar.MARCH);
			season[2] = c.getTime();
		} else if(nSeason == 2) {//第二季度
			c.set(Calendar.MONTH, Calendar.APRIL);
			season[0] = c.getTime();
			c.set(Calendar.MONTH, Calendar.MAY);
			season[1] = c.getTime();
			c.set(Calendar.MONTH, Calendar.JUNE);
			season[2] = c.getTime();
		} else if(nSeason == 3) {//第三季度
			c.set(Calendar.MONTH, Calendar.JULY);
			season[0] = c.getTime();
			c.set(Calendar.MONTH, Calendar.AUGUST);
			season[1] = c.getTime();
			c.set(Calendar.MONTH, Calendar.SEPTEMBER);
			season[2] = c.getTime();
		} else if(nSeason == 4) {//第四季度
			c.set(Calendar.MONTH, Calendar.OCTOBER);
			season[0] = c.getTime();
			c.set(Calendar.MONTH, Calendar.NOVEMBER);
			season[1] = c.getTime();
			c.set(Calendar.MONTH, Calendar.DECEMBER);
			season[2] = c.getTime();
		}
		return season;
	}

	/**
	 *
	 * 1 第一季度  2 第二季度 3 第三季度 4 第四季度
	 *
	 * @param date
	 * @return
	 */
	public static int getSeason(Date date) {

		int season = 0;

		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int month = c.get(Calendar.MONTH);
		switch (month) {
			case Calendar.JANUARY:
			case Calendar.FEBRUARY:
			case Calendar.MARCH:
				season =  1;
				break;
			case Calendar.APRIL:
			case Calendar.MAY:
			case Calendar.JUNE:
				season =  2;
				break;
			case Calendar.JULY:
			case Calendar.AUGUST:
			case Calendar.SEPTEMBER:
				season =  3;
				break;
			case Calendar.OCTOBER:
			case Calendar.NOVEMBER:
			case Calendar.DECEMBER:
				season =  4;
				break;
			default:
				break;
		}
		return season;
	}

	public static void main(String[] args) {
		String strDate = "2010-03-26";
		Date date = parseDate(strDate);
		System.out.println(strDate + " 是一年的第几周?" + getWeekOfYear(date));
		System.out.println(strDate + " 所在周起始结束日期?" + getWeekBeginAndEndDate(date, "yyyy年MM月dd日"));
		System.out.println(strDate + " 所在周周一是?" + formatDate(getMondayOfWeek(date)));
		System.out.println(strDate + " 所在周周日是?" + formatDate(getSundayOfWeek(date)));

		System.out.println(strDate + " 当月第一天日期?" + formatDate(getFirstDateOfMonth(date)));
		System.out.println(strDate + " 当月最后一天日期?" + formatDate(getLastDateOfMonth(date)));
		System.out.println(strDate + " 当月天数?" + getDayOfMonth(date));
		System.out.println(strDate + " 当月已过多少天?" + getPassDayOfMonth(date));
		System.out.println(strDate + " 当月剩余多少天?" + getRemainDayOfMonth(date));

		System.out.println(strDate + " 所在季度第一天日期?" + formatDate(getFirstDateOfSeason(date)));
		System.out.println(strDate + " 所在季度最后一天日期?" + formatDate(getLastDateOfSeason(date)));
		System.out.println(strDate + " 所在季度天数?" + getDayOfSeason(date));
		System.out.println(strDate + " 所在季度已过多少天?" + getPassDayOfSeason(date));
		System.out.println(strDate + " 所在季度剩余多少天?" + getRemainDayOfSeason(date));
		System.out.println(strDate + " 是第几季度?" + getSeason(date));
		System.out.println(strDate + " 所在季度月份?" + formatDate(getSeasonDate(date)[0], "yyyy年MM月") + "/" + formatDate(getSeasonDate(date)[1], "yyyy年MM月") + "/" + formatDate(getSeasonDate(date)[2], "yyyy年MM月"));
	}
}
 
分享到:
评论

相关推荐

    周月起止时间计算

    下面是一个简单的示例代码片段,展示了如何计算给定日期所在周和月的起止时间: ```cpp #include void GetWeekAndMonthRange(COleDateTime date) { // 计算周的起止时间 COleDateTime startOfWeek(date); int ...

    周月旬计算

    总之,“周月旬计算”不仅是数据库编程中的一个技术点,更是数据分析和业务规划中不可或缺的工具。通过理解和掌握其背后的算法和逻辑,可以极大地提升数据处理的效率和准确性,为企业决策提供有力的支持。

    sql语句查询周月年季的最后或第一天

    `DATEADD(interval, number, date)`函数允许我们基于现有的日期向后或向前增加一个特定的时间间隔,其中`interval`可以是`day`、`month`、`year`等,`number`是间隔的数量,`date`是我们想要操作的基准日期。...

    周月涨幅副图指标 通达信指标公式源码.doc

    6. `CROSS`: 判断两个数值是否发生交叉,即一个值从下方穿过另一个值。 接下来,我们分析源码的主要部分: 1. `A` 和 `YA`: 分别计算出当前K线与上一个周的起点和上一个月的起点相距多少周期。 2. `JA` 通过 `MOD...

    安卓天气日历时间选择倒计时相关-支持周月切换上下滑动切换周月左右滑动切换支持显示节假日以及农历日期标记.rar

    这可能需要一个自定义的水平滚动视图,并结合日期逻辑处理滑动事件,确保正确跳转到前一周或后一周。 4. **显示节假日**:这需要一个节假日数据库或API,用于获取特定日期的节假日信息。开发者可以预先加载节假日...

    Android 仿小米日历周月视图切换

    在Android开发中,创建一个类似小米日历的周月视图切换功能是一项常见的需求,它涉及到用户界面(UI)设计、时间与日期处理以及自定义控件的开发。本项目"Android 仿小米日历周月视图切换"旨在实现这样一个功能,...

    查询日期前后的分,日,周,月

    日期工具类,用于查询传过来的日期前后推移过的日期,

    周月切换日历,支持农历,节假日显示,上下左右滑动

    本项目针对公司的特定需求,实现了一个功能丰富的日历视图,支持周月切换,农历显示,节假日标注,以及日期自定义标记。以下是这个定制日历组件的关键知识点和实现细节: 1. **周月切换**:此功能允许用户在周视图...

    通达信指标公式源码日周月K线同图指标.doc

    "通达信指标公式源码日周月K线同图指标" ...通达信指标公式源码日周月K线同图指标是一种复杂的技术指标,提供了一个综合的市场分析工具。该指标可以用于趋势分析、阻力支撑分析和均价分析等多种投资策略。

    LabVIEW获取时间-周月日.rar

    在实际应用中,获取时间并以周月日展示可能会结合到用户界面设计中,比如创建一个仪表盘显示当前日期和星期,或者在日志文件名中包含日期以便追踪。通过LabVIEW的面板(Front Panel)设计和控件,我们可以将这些时间...

    通达信指标——周月量价(副图).doc

    总的来说,“周月量价”指标是一个综合了成交量、价格变动和时间周期的分析工具,可以帮助投资者更全面地了解市场动态,但必须结合个人的投资策略和市场环境进行解读。通过不断学习和实践,投资者可以逐步掌握这个...

    淘宝信誉批量查询周月版(华伊工具箱)

    淘宝信誉批量查询周月版,时速3000 批量查询周月交易点数

    日周月KDJ共振通达信指标公式源码.doc

    本文档提供了一个基于KDJ指标的日周月共振通达信指标公式源码,用于股票市场的技术分析。KDJ指标是一种常用的技术指标,用于衡量股票的强弱程度。通过本文档提供的公式,我们可以生成日、周、月三个时间周期的KDJ...

    自定义日历控件 支持左右无限滑动 周月切换 标记日期显示 自定义显示效果跳转到指定日期

    本文将深入探讨如何实现一个自定义的日历控件,支持左右无限滑动、周月切换、标记日期显示以及自定义显示效果,并能够跳转到指定日期。 首先,我们关注的是自定义日历的样式。自定义日历控件允许开发者根据应用的...

    RSI极地上涨 日周月RSI 自用RSI指标通达信指标公式源码.doc

    在本文档中,作者提供了多个RSI计算公式,包括日RSI、周RSI和月RSI,每个公式都有其特点和应用场景。 日RSI公式:VA1:=HHV(HIGH,9)-LLV(LOW,9); VA2:=HHV(HIGH,9)-CLOSE; VA3:=CLOSE-LLV(LOW,9); VA4:=VA2/VA1*100-...

    Android-android可自定义日历方案支持农历自定义日历控件排班左右滑动周月切换跳转到指定日期等功能

    在Android开发中,创建一个可自定义的日历控件是一个常见的需求,特别是在处理与日期、时间相关的应用中,如日程管理、排班系统等。本文将深入探讨如何实现一个功能丰富的日历方案,包括支持农历、自定义日历控件、...

    通达信指标公式源码日周月KDJ金死.doc

    1. RSV(相对强弱值)计算:RSV = (收盘价 - 9周期最低价) / (9周期最高价 - 9周期最低价) * 100,这个值表示了当前价格相对于过去9天价格范围的位置。 2. K线计算:SMA(RSV, 3, 1),即RSV的3日简单移动平均,表示...

    KDJ日周月同共振金叉公式通达信指标公式源码.doc

    本文档提供的是一个KDJ日周月同共振金叉的指标公式源码,KDJ指标是股市技术分析中常用的一种动量振荡器,用于判断股票的超买超卖状态和市场趋势。 KDJ指标由三部分组成:K线、D线和J线。其中,K线代表快速线,D线...

    通达信指标公式源码MACD、KDJ 日周月共振副图指标.doc

    通达信是一种专业的技术分析平台,提供了多种技术指标和图表工具,用于股票、期货、外汇、股票指数等金融市场的分析和预测。本文档提供了MACD、KDJ 日周月共振副图指标的源码公式,用于在通达信平台上创建MACD、KDJ ...

    通达信指标公式源码 周月日k线主图.doc

    - `AG:=DAY(DAY,1)` 定义了一个布尔变量,表示当前日期是否小于前一天。 - `BG:=BARSLAST(AG)+1` 计算满足 `AG` 条件的最近一次日期到当前的周期数,加上1代表包括当前日期。 - `MH` 和 `ML` 根据 `BG` 计算这一...

Global site tag (gtag.js) - Google Analytics