`
HogwartsRow
  • 浏览: 59806 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

获取年、季度、周的开始日期和结束日期工具类

阅读更多
package com.hogwartsrow.test;

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

/**
 * 复杂得日期工具类
 * @author HogwartsRow
 *
 */
public class MOEDateUtils {
	
	/**
	 * 获取某周得第一天
	 * @param year 年
	 * @param week 周
	 * @return
	 */
	public static Date getFirstDayOfWeek(int year, int week){
		Calendar c = new GregorianCalendar();
		
		c.set(Calendar.YEAR, year);
		c.set(Calendar.WEEK_OF_YEAR,  week);
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
		c.set(Calendar.HOUR, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.SECOND, 0);
		
		return c.getTime(); 
	}
	
	/**
	 * 获取某周得最后一天
	 * @param year 年
	 * @param week 周
	 * @return
	 */
	public static Date getLastDayOfWeek(int year, int week){
		Calendar c = new GregorianCalendar();
		
		c.set(Calendar.YEAR, year);
		c.set(Calendar.WEEK_OF_YEAR,  week);
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
		c.set(Calendar.HOUR, 23);
		c.set(Calendar.MINUTE, 59);
		c.set(Calendar.SECOND, 59);
		
		return c.getTime(); 
	}
	
	/**
	 * 获取某月得第一天
	 * @param year 年
	 * @param month 月
	 * @return
	 */
	public static Date getFirstDayOfMonth(int year, int month){
		Calendar c = new GregorianCalendar();
		
		c.set(year, month, 1);
		c.set(Calendar.HOUR, 0);
		c.set(Calendar.MINUTE, 0);
		c.set(Calendar.SECOND, 0);
		
		return c.getTime(); 
	}
	
	/**
	 * 获取某月得最后一天
	 * @param year 年
	 * @param month 月
	 * @return
	 */
	public static Date getLastDayOfMonth(int year, int month){
		Calendar c = new GregorianCalendar();
		
		c.set(year, month, 1);
		c.roll(Calendar.DATE, -1);
		c.set(Calendar.HOUR, 23);
		c.set(Calendar.MINUTE, 59);
		c.set(Calendar.SECOND, 59);
		
		return c.getTime(); 
	}
	
	/**
	 * 获取某季度得第一天
	 * @param year 年
	 * @param quarter 季度
	 * @return
	 */
	public static Date getFirstDayOfQuarter(int year, int quarter){
		Calendar c = new GregorianCalendar();
		
		int month = 0;
		switch (quarter) {
		case 1:
			month = 1-1;
			break;
		case 2:
			month = 4-1;		
			break;
		case 3:
			month = 7-1;
			break;
		case 4:
			month = 10-1;
			break;
		default:
			month = c.get(Calendar.MONTH);
			break;
		}
		
		return getFirstDayOfMonth(year, month); 
	}
	
	/**
	 * 获取某季度得最一天
	 * @param year 年
	 * @param quarter 季度
	 * @return
	 */
	public static Date getLastDayOfQuarter(int year, int quarter){
		Calendar c = new GregorianCalendar();
		
		int month = 0;
		switch (quarter) {
		case 1:
			month = 3-1;
			break;
		case 2:
			month = 6-1;		
			break;
		case 3:
			month = 9-1;
			break;
		case 4:
			month = 12-1;
			break;
		default:
			month = c.get(Calendar.MONTH);
			break;
		}
		
		return getLastDayOfMonth(year, month); 
	}
	
	/**
	 * 获取某年得第一天
	 * @param year 年
	 * @return
	 */
	public static Date getFirstDayOfYear(int year){
		return getFirstDayOfMonth(year, 0);
	}
	
	/**
	 * 获取某年得最后一天
	 * @param year 年
	 * @return
	 */
	public static Date getLastDayOfYear(int year){
		return getLastDayOfMonth(year, 11);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		System.out.println("周一: " + getFirstDayOfWeek(2016, 25));

		System.out.println("周末: " + getLastDayOfWeek(2016, 25)); 
		
		System.out.println("月初:" + getFirstDayOfMonth(2016, 5));
		
		System.out.println("月末:" + getLastDayOfMonth(2016, 4));
		
		System.out.println("季初:" + getFirstDayOfQuarter(2016, 1));
		
		System.out.println("季末:" + getLastDayOfQuarter(2016, 2));
		
		System.out.println("年初:" + getFirstDayOfYear(2016));
		
		System.out.println("年末:" + getLastDayOfYear(2016));
		
	}

}

 

2
2
分享到:
评论
3 楼 sd445419855 2019-07-29  
有一个小坑,Calendar.HOUR, 是设置 12 小时制的时间,要设置 24 小时制的才好使 Calendar.HOUROFDAY 。 总体很棒!
2 楼 Saro 2016-06-23  
尝试下Joda-Time或者JAVA8吧。
1 楼 hardneedl 2016-06-23  
是时候用JAVA 8 新的日期时间类了

相关推荐

    基于Java语言编写的Spring Boot时间工具类方法封装

    基于Java语言编写的Spring Boot时间工具类方法封装,主要方法如下:根据日期获取该日期内24小时的整点时刻、获取当月的 天数、根据 年、月 获取对应的月份 的 天数、根据指定日期得获取对应月份的所有日期的每日结束...

    根据输入月份获取季度区间

    根据给定的文件信息,我们可以总结出以下关于“根据输入月份获取季度区间”的详细IT知识点: ### 一、概述 该代码片段展示了一个名为`DateUtil`的Java类,其中包含一个方法`getQuarterInterval`,用于根据输入的...

    史上最全面DateUtil工具类,没有之一

    - 每个季度:可能包含获取季度起始和结束日期的功能,对于季度报告或周期性任务调度很有帮助。 - 每年:获取一年的开始和结束日期,可用于年度数据分析。 2. **时间间隔计算**: - 两个日期的时间差:DateUtil...

    php根据年月获取季度的方法

    在不同的国家和地区,财政年度的开始和结束时间可能有所不同,但通常是以1月开始,3月结束为第一季度,以此类推。 在给定的文件中,我们看到了一段PHP代码,该代码定义了一个名为`getQuarterByMonth`的函数。这个...

    使用java的Calendar对象获得当前日期

    在本文中,我们将深入探讨如何使用`Calendar`对象来获取当前日期,并计算上一个季度的开始和结束日期。 首先,我们需要创建一个`Calendar`实例来获取当前日期。这是通过调用`Calendar.getInstance()`方法完成的。此...

    xk-time Java时间工具包 v3.2.0.zip

    它可能提供了对这些周期的便捷操作,比如获取当前季度的开始和结束日期,或者计算某日期所在的星期数。 在并发编程中,有时我们需要暂停或延迟执行某些任务,XK-Time可能包含了一组延迟和定时器相关的方法,使得...

    java常用时间方法

    对于这类操作,通常涉及到使用`Calendar`或`GregorianCalendar`类来调整日期,以达到获取指定月份或年度的起始和结束日期的目的。 ### 4. 计算两个日期之间的天数差 `getTwoDay`方法展示了如何计算两个日期之间的...

    SQL常用函数

    `datepart`同样指定了计算差值的日期部分,`startdate`和`enddate`分别是计算的起始和结束日期。例如,`DATEDIFF(day, '2022-01-01', '2022-01-31')`会返回这两个日期之间相隔的天数。需要注意的是,当使用...

    Java如何获得系统时间

    对于季度操作,`getThisSeasonTime`方法可能用于获取本季度的起始和结束日期。Java标准库没有直接提供季度操作,但可以通过计算当前月份所属的季度,并结合月份的天数来实现。 最后,`getTwoDay`方法计算两个日期...

    java月份区间计算

    本文将深入探讨一个实用的工具类——`DateUtil`,它能够帮助我们计算两个指定月份之间的所有月份,即月份区间计算。 #### 一、`DateUtil`类概述 `DateUtil`类包含了一个名为`getMonthInterval`的方法,该方法接收...

    asp.net下日期和时间处理的类库

    2. **日期工具类**:提供了一系列静态方法来帮助开发者轻松地获取指定季度的开始和结束时间,以及当前季度等信息。 #### 二、枚举类型 ##### 1. Quarter 枚举 - `First`: 第一季度 (1月1日至3月31日) - `Second`:...

    PHP 日期加减的类,很不错

    - `$date2`:结束日期。 `DateDiff`方法会根据给定的间隔单位计算`$date1`和`date2`之间的时间差,并返回这个差值。 示例代码展示了如何使用`DateAccount`类。首先,获取当前时间的Unix时间戳,然后创建`...

    EXCEL常用模板-人事模板-档案类-职业生涯规划目标分解及行动方案实施表模板.zip

    用户需要为每个任务分配开始日期和截止日期,以保持进度的连贯性。这有助于避免拖延,确保任务按时完成。 5. **追踪与评估**:为了持续改进和调整计划,模板应包含追踪和评估机制。用户可以定期回顾进度,评估完成...

    私募投资基金信息披露内容与格式指引.docx

    月度报告需在每月结束后的5个工作日内完成,季度报告在每季度结束后10个工作日内,而年度报告则需在会计年度结束后的4个月内完成,确保投资者及时获取基金的最新信息。 报告内容涵盖基金的基本信息,如基金名称、...

    促销活动计划表.zip

    2. **活动时间**:确定活动的开始和结束日期,考虑到节假日、季度销售周期和其他可能影响销售的因素。 3. **促销策略**:选择适合的促销手段,如打折、买一赠一、满减、优惠券、积分兑换等,并详细描述其规则。 4....

    1第章财务报表.ppt

    财务报表主要包括年度财务报表和中期财务报表,前者在会计年度结束时发布,后者则涵盖月度、季度和半年的数据。一个完整的财务报告通常包括资产负债表、利润表、现金流量表和所有者权益变动表,这些报表之间存在内在...

    报刊订阅登记表.doc

    4. **时间管理**:表格中的"年 月 日"字段表明订阅信息是按时间记录的,有助于跟踪订阅的开始和结束日期,以及更新订阅频率(如季度订阅)。 5. **经办人**:"经办人"一栏用于填写负责处理订阅事务的人员姓名,确保...

    飞雪桌面日历 2.62 绿色版

    6.增加重复备忘录的结束日期设置<添加备忘> 7.增加备忘录按季度重复提醒 8.增加月历的星座提示 9.增加月历的转到指定日期功能.<月历菜单> 10.增加恢复默认外观功能<所有功能设置>. 11.增加自定义托盘提示内容设置...

    J.P. 摩根-美股-建材行业-美国建材业:尽管今年以来已上涨了52%,但仍看好-2019.9.4-37页.pdf

    报告日期是2019年9月4日,报告详细分析了建材行业自今年以来已经上涨了52%的情况,尽管如此,分析师依然对这个行业持正面看法。 以下是根据文件内容提炼出的详细知识点: 1. 行业概览:报告首先介绍了北美股权研究...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,这些规范描述了 Web 的通信协议(比如 HTML 和 XHTML)和其他的构建模块。 NativeApp 使用...

Global site tag (gtag.js) - Google Analytics