`
qq1988627
  • 浏览: 106936 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

日期处理工具类

 
阅读更多
package zxc.utils;

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

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

import zxc.exceptions.LogicalException;

public class CalendarUtil {
	protected static Log	log							= LogFactory.getLog(CalendarUtil.class);

	/** 设置一个星期的第一天 */
	public static final int	FIRST_DAY_OF_WEEK			= Calendar.SUNDAY;

	/** 设置一年或一个月的第一个星期的最小天数 */
	public static final int	MINIMAL_DAYS_IN_FIRST_WEEK	= 1;

	/**
	 * 取得当前日期是多少周,星期日被定为一周的第一天,第一周允许的最小天数为1
	 * 
	 * @param date
	 * @return
	 */
	public static int getWeekOfYear(Date date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.setTime(date);

		return c.get(Calendar.WEEK_OF_YEAR);
	}

	public static int getWeekOfyear(int year, int month, int date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.set(year, month, date);
		return getWeekOfYear(c.getTime());
	}

	/**
	 * 总体上可以说是求一年的总周数,因为52*7=364,所以基本上此值应该为52,但是这里所要求的是一年中的最
	 * 后几天的WEEK_OF_YEAR的值,为什么不直接取12月31日的WEEK_OF_YEAR的值呢,这是因为根据
	 * setFirstDayOfWeek与setMinimalDaysInFirstWeek设置的值12月31日所WEEK_OF_YEAR字段所返回的值
	 * 很可能是下一年的第一个星期
	 * 
	 * @param year
	 * @return
	 */
	public static int getMaxWeekNumOfYear(int year) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.set(year, Calendar.DECEMBER, 31);
		return c.get(Calendar.WEEK_OF_YEAR) == 1 ? 52 : c.get(Calendar.WEEK_OF_YEAR);
	}

	/**
	 * 获取某年第一周的天数
	 * 
	 * @param year
	 * @return
	 */
	public static int getDaysOfFirstWeek(int year) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.set(year, Calendar.JANUARY, 1);
		return 8 - c.get(Calendar.DAY_OF_WEEK);
	}

	/**
	 * 取得当前日期所在周的第一天
	 * 
	 * @param date
	 * @return
	 */
	public static Date getFirstDayOfWeek(Date date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.setTime(date);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
		return c.getTime();
	}

	public static Date getFirstDayOfWeek(int year, int month, int date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.set(year, month, date);
		return getFirstDayOfWeek(c.getTime());
	}

	/**
	 * 取得当前日期所在周的最后一天
	 * 
	 * @param date
	 * @return
	 */
	public static Date getLastDayOfWeek(Date date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.setTime(date);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() == 1 ? 7 : (c.getFirstDayOfWeek() + 6) % 7);
		return c.getTime();
	}

	public static Date getLastDayOfWeek(int year, int month, int date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.set(year, month, date);
		return getLastDayOfWeek(c.getTime());
	}

	/**
	 * 获取两个日期间的周次差,这两个日期要么在同一年,要么是相邻的两个年份
	 * 
	 * @param start
	 * @param end
	 * @return
	 */
	public static int getDeltaWeeks(Date start, Date end) {
		Calendar cs = Calendar.getInstance();
		Calendar ce = Calendar.getInstance();
		cs.setTime(start);
		ce.setTime(end);
		int s = getWeekOfYear(start);
		int e = getWeekOfYear(end);
		return cs.get(Calendar.YEAR) == ce.get(Calendar.YEAR) ? e - s : e - s + getMaxWeekNumOfYear(cs.get(Calendar.YEAR));
	}

	public static int getDeltaWeeks2(Date start, Date end) {
		Calendar cs = Calendar.getInstance();
		Calendar ce = (Calendar) cs.clone();
		Calendar ct = Calendar.getInstance();
		ct.setTime(start);
		cs.set(ct.get(Calendar.YEAR), ct.get(Calendar.MONTH), ct.get(Calendar.DATE));
		ct.setTime(end);
		ce.set(ct.get(Calendar.YEAR), ct.get(Calendar.MONTH), ct.get(Calendar.DATE));
		cs.setTime(getFirstDayOfWeek(cs.getTime()));
		ce.setTime(getFirstDayOfWeek(ce.getTime()));
		return (int) ((ce.getTimeInMillis() - cs.getTimeInMillis()) / (7 * 24 * 60 * 60 * 1000) + 1);
	}

	/**
	 * 得到某年某周的第一天
	 * 
	 * @param year
	 * @param week
	 * @return
	 */
	public static Date getFirstDayOfWeek(int year, int week) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.set(year, Calendar.JANUARY, 1);
		c.add(Calendar.DATE, week * 7);

		return getFirstDayOfWeek(c.getTime());
	}

	/**
	 * 得到某年某周的最后一天
	 * 
	 * @param year
	 * @param week
	 * @return
	 */
	public static Date getLastDayOfWeek(int year, int week) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.set(year, Calendar.JANUARY, 1);
		c.add(Calendar.DATE, week * 7);

		return getLastDayOfWeek(c.getTime());
	}

	/**
	 * 获取当前日期所在月份的第一天
	 * 
	 * @param date
	 * @return
	 */
	public static Date getFirstDayOfMonth(Date date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.setTime(date);
		c.set(Calendar.DAY_OF_MONTH, 1);

		return c.getTime();
	}

	/**
	 * 获取当前日期所在月份的最后一天
	 * 
	 * @param date
	 * @return
	 */
	public static Date getLastDayOfMonth(Date date) {
		Calendar c = Calendar.getInstance();
		c.setFirstDayOfWeek(FIRST_DAY_OF_WEEK);
		c.setMinimalDaysInFirstWeek(MINIMAL_DAYS_IN_FIRST_WEEK);
		c.setTime(date);
		c.set(Calendar.DAY_OF_MONTH, 1);//日期置1
		c.add(Calendar.MONTH, 1);//月份向前添加一个月
		c.add(Calendar.DAY_OF_MONTH, -1);//日期-1

		return c.getTime();
	}

	/**
	 * 获取当前日期所在月份的最后一天
	 * 
	 * @param date
	 * @return
	 */
	public static long getDaysOfTwoDate(Date start, Date end) {
		Calendar c = Calendar.getInstance();
		Calendar temp = Calendar.getInstance();

		//取年月日
		c.setTime(start);
		temp.clear();
		temp.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
		start = temp.getTime();
		System.out.println(start);

		//取年月日
		c.setTime(end);
		temp.clear();
		temp.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
		end = temp.getTime();
		System.out.println(end);

		long time = (end.getTime() - start.getTime()) / (24 * 60 * 60 * 1000);

		return time + 1;
	}

	public static int getYear(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int year = c.get(Calendar.YEAR);
		return year;
	}
	
	public static int getMothOfYear(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int month = c.get(Calendar.MONTH);
		return month+1;
	}
	
	public static int getHalfOfYear(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int month = c.get(Calendar.MONTH);
		return month <= 5 ? 1 : 2;
	}

	public static int getQuarterOfYear(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int month = c.get(Calendar.MONTH);
		switch (month) {
		case 0:
		case 1:
		case 2:
			return 1;
		case 3:
		case 4:
		case 5:
			return 2;
		case 6:
		case 7:
		case 8:
			return 3;
		case 9:
		case 10:
		case 11:
			return 4;

		default:
			throw new LogicalException("不可能存在其它的月份值");
		}
	}
	public static int getQuarterOfYear2(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int month = c.get(Calendar.MONTH);
		return month / 3 + 1;
	}

	public static void main(String[] args) {
		Date start = new Date();
		Date end1 = new Date(start.getTime() + 60 * 60 * 1000);
		Date end2 = new Date(start.getTime() + 7 * 60 * 60 * 1000);
		Date end3 = new Date(start.getTime() + 8 * 60 * 60 * 1000);
		Date end4 = new Date(start.getTime() + 20 * 60 * 60 * 1000);
		Date end5 = new Date(start.getTime() + 24 * 60 * 60 * 1000);
		System.out.println(getDaysOfTwoDate(start, end1));
		System.out.println(getDaysOfTwoDate(start, end2));
		System.out.println(getDaysOfTwoDate(start, end3));
		System.out.println(getDaysOfTwoDate(start, end4));
		System.out.println(getDaysOfTwoDate(start, end5));
	}
}
 
分享到:
评论

相关推荐

    UTILS_日期处理工具类_

    "UTILS_日期处理工具类_" 提供了一组用嵌入式语言实现的日期处理工具代码,帮助开发者更方便地进行时间相关的操作。下面我们将详细探讨这个工具类包含的主要知识点。 1. **日期和时间基础**: - 在编程中,日期和...

    Java日期处理工具类

    基本涵盖了各种场景的日期处理需要,包括时间类型转换,获取N天前后,月初月末,某段时间按天拆分等功能,欢迎使用。

    js 日期处理工具类

    js 日期处理工具类,实现了日期的转换,日期格式: 30分钟前,16:20,昨天 11:11、11-17 10:10,等格式。

    swift-Swift的现实世界日期处理工具类

    本篇文章将深入探讨Swift中的日期处理工具类,以及如何在实际项目中有效利用它们。 首先,Swift的`Date`类代表一个时间点,通常是一个全球协调时间(UTC)。这个类是不可变的,意味着所有基于`Date`的操作都不会...

    java 日期处理工具类

    java 日期处理工具类

    安卓开发框架工具类相关-很实用的安卓开发工具类开发必备日期处理工具类IO流转换工具类打印日志工具类屏幕字符串工具类Toast工具类弹框工具类.zip

    很实用的安卓开发工具类,开发必备,日期处理工具类,IO流转换工具类,打印日志工具类,屏幕,字符串工具类,Toast工具类,弹框工具类.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    java日期处理工具类

    日期操作工具类,主要实现了日期的常用操作。 * * 在工具类中经常使用到工具类的格式化描述,这个主要是一个日期的操作类,所以日志格式主要使用 SimpleDateFormat的定义格式. * * 格式的意义如下: 日期和...

    最全Java常用日期处理工具类

    2014" 专门用于处理springboard定时任务修改cron参数的日期处理方法 12.获取本月第一天(月初时间) 13.获取本月最后一天(月底时间) 以上这些方法都在该Java工具类,当然不仅仅包含这些,还有其他的很多。

    Java中封装的全局日期处理工具类

    获取日期中的某数值。如获取月份 增加日期中某类型的某数值。如增加日期 获取精确的日期 判断字符串是否为日期字符串 获取日期字符串的日期风格。失敗返回null。 将日期字符串转化为日期。失败返回null。 ...

    DateUtil日期处理工具类

    日期操作工具类,String转Long,String转Date,Date转String,Date转Long,Long转Date,Long转String等

    超好用的日期处理工具类

    超好用的时间工具类,包括时间各种格式转换,时间字符串互相转,时间增加,时间减去,单独获取日,获取月,获取时间等

    农历(阴历)日期处理工具类

    本篇文章将介绍一个名为"LunarCalendar"的Java工具类,它专门用于农历日期的处理。 首先,我们来看`LunarCalendar`这个类的基本结构。这个类通常会包含一系列的内部数据结构来表示农历的年、月、日,可能还包括时、...

    DateUtil.java 时间日期处理工具类

    包含"yyyy-MM-dd"、"yyyy-MM-dd HH:mm:ss"、"yyyyMMdd"、"yyyyMMddHHmmss"、"yyyy-MM"、"yyyyMM"等时间格式的转换。 其中: 1.String转Timestamp stringToTimestamp(String dateStr); 2.比较传入时间与当前时间前一...

    Java日期处理工具类DateUtils详解

    Java日期处理工具类DateUtils详解 Java日期处理工具类DateUtils是Java中一个非常有用的工具类,它提供了一系列日期和时间处理相关的操作,涵盖了日期和时间的格式化、解析、计算等多方面的内容。本文将详细介绍...

    Android快速开发系列 10个常用工具类 程序源码

    2. **DateUtil**: 时间日期处理工具类,通常包含将日期格式化为字符串,字符串转换为日期,计算两个日期之间的差值等功能。在Android开发中,这类工具类能帮助开发者更好地管理和展示时间数据。 3. **BitmapUtil**:...

Global site tag (gtag.js) - Google Analytics